|  | 		    
					
    
        
            
                
                | |  | betingelse på attributter Fra :
  mikkel1 | Vist : 862 gange 220  point
 Dato :  22-06-03 10:09
 | 
 |  | Hej
 Jeg har en tabel A i den skal jeg bruge værdierne b hvis de opstår i 4 rækker i træk, jeg ved ikke hvad jeg skal skrive i where delen så mit spørsmål er hvordan vil den query se ud?
 
 ****
 select b
 from A
 where
 
 Tak Mikkel
 
 
 |  |  | 
 | |  | Kommentar Fra :
  mikkel1 | 
 Dato :  22-06-03 12:40
 | 
 |  | 
 
                Hej igen
 jeg har ikke furlemeret mig helt klart, tabellen ser således ud:
 Tabel A
 {
   id 
   navn 
   ...
   kørsel   
 }
 Jeg skal en query der kan finde id navn og kørsel hvis attributten kørsel får værdien 'b' 4 gange i træk.
 jeg bruger MSSQL server 2000
 Tak
 Mikkel
   
                
                
                 |  |  | 
 | |  | Accepteret svar Fra :
  pmbruun  |  Modtaget 220  point
 Dato :  23-06-03 08:46
 | 
 |  | 
 
                Hej Mikkel,
 Når du skriver "i træk" er det ikke meningsfuldt, da rækkerne i en tabel ikke ligger i nogen bestemt orden. For at det skal give mening, er du nødt til at fortælle, hvad du *sorterer* på. Det kunne f.eks. være "id". Det, du vil søge på er så måske, om der er mere end 4 rækker med samme id, der har samme værdi for attributten "b".
 select distinct id, navn, kørsel from A a1
 where ( select count(b) from A a2
            where a2.id = a1.id and a2.b = a1.b
          ) >= 4
 go
 Værre bliver det, hvis du med "i træk" mener, at der er et eller andet sekvensnummer eller tidsstempel, som vokser for hver ny række, og det du vil er, at finde alle forekomster hvor fire på hinanden følgende sekvensnumre har samme værdi for b.
 Jeg kan ikke lige se, om noget sådant kan formuleres i SQL - ellers må du bruge en stored procedure...
 Peter
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  MKC | 
 Dato :  23-06-03 09:22
 | 
 |  | 
 
                Hej 
 Jeg er lige logge in på en anden konto.
 Jeg har en tabel der sorter på ID og Dato hvis attributten kørsel indeholder  4 x 'b' for samme ID og på samme dato så skal jeg tage sum på en attribut der hedder 'Km' 
 tak
 Mikkel
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  pmbruun  | 
 Dato :  23-06-03 10:27
 | 
 |  | 
 
                Så skulle princippet i ovenstående query virke, men du får lige lidt mere kompleksitet fordi du skal summere km feltet.
 Du skal bare lige sætte kriteriet for datoen ind også. Jeg har jo ikke den præcise tabel, men noget i retning af:
 select id, dato, sum(km) from a a1
 where (select count(b) from a a2
           where a2.id = a1.id and a2.dato = a1.dato and a2.b = a1.b) >= 4
 group by id, dato
 go
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  MKC | 
 Dato :  23-06-03 11:31
 | 
 |  | 
 
                Hej Igen
 Jeg får stadig en underlig fejl, jeg har indsat den orginale kode jeg får følgende fejl:
 ***********
 Server: Msg 156, Level 15, State 1, Line 10
 Incorrect syntax near the keyword 'AND'.
 Server: Msg 170, Level 15, State 1, Line 12
 Line 12: Incorrect syntax near '>'.
 ***********
 Fejlen er i linien "AND  (select count(S)" S er en varchar måske der for 
 SELECT  DISTINCT CNR,ID,NR,DATO,
 (SELECT SUM(TIMER)
  FROM   FRAVAERSOPLYSNING WS
  WHERE      WS.NR        = W.NR
    AND WS.CNR           = W.CNR
    AND WS.KODEID = W.KODEID
    AND WS.DATO          = W.DATO
    AND FRAKODEID     = 'S') AS S                
    AND  (select count(S)
       where (WS.APOTEKNR = W.APOTEKNR and WS.STILLINGSKODEID = W.STILLINGSKODEID 
                and WS.OPRET_DATO = W.OPRET_DATO) >= 4,
 Tak igen
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  pmbruun  | 
 Dato :  23-06-03 11:53
 | 
 |  | 
 
                Sjusk!
 Der står ") AS S" og blafrer midt imellem en masse AND udtryk.
 Du mangler FROM... efter "select count(S)".
 Det hele ender også lidt underligt efter ">= 4," - der må mangle noget.
 Det er ikke "pæn SQL" at indlejre select's i FROM listen - du får for mange tabelscan og forvirrer optimizeren.
 Hvis du skal bruge yderligere hjælp med almindelig SQL syntaks, må du stille et nyt spørgsmål. Men gør dig lige lidt mere umage selv før du farer tilbage og siger "hjælp, jeg kan ikke finde ud af det!". Jeg vil gerne hjælpe dig med gode ideer og svære problemer - men til gengæld må jeg som minimum forlange, at du ikke sjusker med mine svar!
 Peter
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  MKC | 
 Dato :  23-06-03 12:02
 | 
 |  | 
 
                Det jeg vil opnå er : sum på timer, hvis kodeID har værdien 'S' 4 gange i træk (alså 4 datoer)
 Mikkel
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  pmbruun  | 
 Dato :  23-06-03 12:12
 | 
 |  | 
 
                Nu må du altså bestemme dig til om det er timer eller km, der skal summeres!
 Lad være med at have select i from-listen.
 Brug "group by" som vist.
 Brug FRAKODEID     = 'S' i stedet for a1.b = a2.b
 Prøv selv. Start med det, jeg skrev ovenfor. Prøv at *forstå* svaret, i stedet for at panikke og gøre noget tilfældigt.
 Lav evt. en lille testtabel med nogle simple værdier, og prøv mit query. Det har jeg selv gjort for at være sikker på at det jeg sendte virkede. Det tager ca. 3 minutter.
 Så kan det være du lærer noget! Er det ikke det, der er meningen?
 Peter
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  MKC | 
 Dato :  23-06-03 12:20
 | 
 |  | 
 
                Hej Peter
 Jeg prøver ikke at lave sjusk, jeg kigger lidt mere på ellers opretter jeg en ny tråd
 Tak for hjælpen.
                
                
                 |  |  | 
 | |  | Kommentar Fra :
  MKC | 
 Dato :  23-06-03 15:31
 | 
 |  | 
 
                Jeg kan først lukke dette spørsmål i overmorgen Peter vil få alle point, jeg har stilliet et nyt spørsmål 
 Tak Mikkel
                
                
                 |  |  | 
 | |  | Godkendelse af svar Fra :
  mikkel1 | 
 Dato :  23-06-03 21:54
 | 
 |  |  |  |  | 
 | |  | Du har følgende muligheder |  | 
 |  | 
            
               
                    Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
 Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
 |  |  | 
 |  |