|
| betingelse på attributter Fra : mikkel1 | Vist : 575 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.
| |
|
|