Avatar billede donnib Nybegynder
05. marts 2006 - 18:27 Der er 2 kommentarer og
1 løsning

SELECT CASE sætning

Hej allesammen,
Jeg prøver ihærdigt at få et resultat på et select sætning til at vise det jeg vil og jeg kan ikke få den til det så jeg beder jer om hjælp.

Her er hvad min tabel indeholder :

Application      Test              Status    DateTime
-----------------------------------------------------------
2250SW            Remote      True    02-03-2006 00:00:00
2250SW            Remote      False    02-03-2006 00:00:00
2250SW            Remote      True    02-03-2006 00:00:00
2250SW            BZ5503          True    03-03-2006 00:00:00
2250SW            BZ5503          False    03-03-2006 00:00:00
DataRec            Online      False    03-03-2006 00:00:00
DataRec            Online      False    03-03-2006 00:00:00
DataRec            Online      True    03-03-2006 00:00:00

Jeg vil gerne have følgende resultat tilbage :

Application    Status      DateTime
----------------------------------------------
2250SW          True    02-03-2006 00:00:00
DataRecorder  False    03-03-2006 00:00:00

Dvs. for 2250SW applikationen skal den kigge på alle rows og se om der opstår en False imellem. Hvis der gør det skal der stå False ellers True som er min tilfælde i denne eksempel. Samme gælder for næste applikation eller for alle de applikationer som der måtte være.

Jeg har vha. denne SQL sætning fået True eller False når jeg spørger min tabel på en applikation. Min problem er atr jeg ønsker en lise for alle aplikationer med en status ligesom det er vist i min eksempel ovenover.

SELECT
CASE WHEN EXISTS (SELECT * FROM minTabel WHERE Application = '2250SW' AND Status = 0) THEN 'True'
ELSE 'False' END AS Status

Spørgsmålet er hvordan samsætter jeg sådan en sætning så jeg får det jeg ønsker ?

/donnib
Avatar billede kjulius Novice
05. marts 2006 - 19:34 #1
Jeg er lidt forvirret, må jeg indrømme. Du skriver:
"Dvs. for 2250SW applikationen skal den kigge på alle rows og se om der opstår en False imellem. Hvis der gør det skal der stå False ellers True som er min tilfælde i denne eksempel."
Men i dine data er der da to rows (nr. 2 og 5), som indeholder en False status, skulle der så ikke returneres False for 2250SW applikationen?

SELECT DISTINCT t1.Application, CASE WHEN t2.Application IS NULL THEN 'True' ELSE 'False' END AS Status, CASE WHEN t2.Application IS NULL THEN t3.DateTime ELSE t2.DateTime END AS DateTime
FROM Dintabel t1
LEFT JOIN (SELECT Application, Status, Min(DateTime) AS DateTime FROM dintabel WHERE Status = '0' GROUP BY Application, Status) AS t2 ON t1.Application = t2.Application
LEFT JOIN (SELECT Application, Status, Min(DateTime) AS DateTime FROM dintabel WHERE Status = '1' GROUP BY Application, Status) AS t3 ON t1.Application = t3.Application
ORDER BY t1.Application

(ikke afprøvet).
Avatar billede donnib Nybegynder
06. marts 2006 - 11:03 #2
fungerer fint. du har ret. det var en fejl i min eksempel. tak for hjælpen. du skal lige svare.
Avatar billede kjulius Novice
06. marts 2006 - 21:40 #3
Jamen det gør jeg da gerne...
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