Avatar billede lkhlars Nybegynder
05. februar 2002 - 13:10 Der er 10 kommentarer

sql spørgsmål - duplikater

Hvordan laver man distinct hvor to rækker udgør  sorteringen - i nedenstående sql får jeg duplikater i styleid og styleitemid. Hvis jeg fik lavet en sortering som fjernede duplikater i de 2 nøglerækker styleid og styleitemid var problemet løst - men hvordan gør man det?
select distinct
        STYLEID AS STYLEID
        ,STYLEITEMID AS STYLEITEMID
        ,DATASORT AS  STYLEDATASORT
        ,DATATYPE AS STYLEDATATYPE
        ,DATAGUIDE AS STYLEGUIDE
        ,DATAUNIT AS STYLEUNIT
from       
     
    pak_DATAS
Avatar billede terry Ekspert
05. februar 2002 - 13:14 #1
DISTINCT removes duplicate ROWS. In other words if other fields are different then you will get duplicates.
Avatar billede proaccess Nybegynder
05. februar 2002 - 13:15 #2
Hvilke datasort, -type, -guide, -unit, skal du så have pr. styleID og StyleitemID...?

SELECT STYLEID, STYLEITEMID, FIRST(DATASORT) AS STYLEDATASORT, FIRST(DATATYPE) AS STYLEDATATYPE, FIRST(DATAGUIDE) AS STYLEDATAGUIDE, FIRST(DATAUNIT) AS STYLEUNIT
FROM pak_DATAS
GROUP BY STYLEID, STYLEITEMID
Avatar billede terry Ekspert
05. februar 2002 - 13:16 #3
You have to decide what you want form the result. If you want to see all the other fields then DISTINCT isnt going to help.
Avatar billede terry Ekspert
05. februar 2002 - 13:18 #4
As proaccess has demonstrated you can show the first value of each DISTINCT STYLEID, STYLEITEMID, but is it the first you actually want to see?
Avatar billede proaccess Nybegynder
05. februar 2002 - 13:21 #5
forespørgslen kunne også have været lavet med LAST, MAX, MIN, AVG, SUM og så videre... du er bare nødt til at vælge HVILKEN info du vil have pr. distinct (GROUPED) style.
Avatar billede lkhlars Nybegynder
05. februar 2002 - 15:37 #6
Det jeg ønsker er at få et sorteret udtræk, som kun tager rækker hvor nøglefeltet styleid og styleitemid kun optræder en gang. Det er sådan at fx. til styleid 79 er der 6 nøgler, men 2 a f dem er ens fx. styleid 79 optræder 2 gange med med styleitemid 510 - det er problemet. Resten af listen er kolonner, der skal følge hvert nøglefelt - altså ikke udelades. Kan det løses ved grupperet distinct på nøglefelterne?
Avatar billede proaccess Nybegynder
05. februar 2002 - 15:47 #7
Jo, men du er nødt til at vælge hvilke af dine data-værdi'er du vil have udvalgt sammen med den DISTINCTE nøgle...

Hvis det var sådan, at alle data i rækken med styleid=79 og styleitemid=510 var ens, så havde du jo slet ikke problemet, altså må du vælge hvilket sæt data du vil vise ved styleid=79 og styleitemid=510... Som illustreret i min første SQL.
Avatar billede proaccess Nybegynder
05. februar 2002 - 15:56 #8
CREATE VIEW distinctStyle (StyleID, StyleItemID) AS SELECT StyleID,  StyleItemID FROM pak_DATAS GROUP BY StyleID, StyleItemID WHERE COUNT(*)=1;

SELECT D.StyleID, D.StyleItemID, P.DATASORT, P.DATATYPE, P.DATAGUIDE, P.DATAUNIT FROM distinctStyle D INNER JOIN pak_DATAS P ON D.StyleID=P.StyleID AND D.StyleItemID=P.StyleItemID;

Derved får du KUN de rækker fra din oprindelige tabel, som tilhører en style-kombination, som kun har een nøgleværdi !!! - et svar i en helt anden boldgade, men det kan være det er dér du vil hen...
Avatar billede lkhlars Nybegynder
05. februar 2002 - 16:09 #9
Ja, de 2 selects ser rigtige ud (også den med view), men jeg får syntaks fejl, når jeg kører dem. Function unknown (FIRST) og view'et kan ikke oprettes.
Avatar billede lkhlars Nybegynder
06. februar 2002 - 12:01 #10
Hvis jeg skal prøve at forklare problemet nærmere så vil det ideel være hvis man kunne lave en UNION med en tabel som har de rigtige styleid og styleitemid - sådan en har jeg, men den har kun fire felter og er kun ens med den anden i styleid og styleitemid. Nogen Ideer?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester