26. august 2005 - 12:45Der er
6 kommentarer og 1 løsning
SQL Forespørgsel
Hej
Jeg har en tabel hvor jeg har to felter
ResourceID TransportID
Feltet transportID kan indeholde tal fra 0 til 500000 hvis tallet er = 999999 er det en ukendt, fordi systemet ikke kender identen.
Men hvordan kan jeg lave en select hvor jeg får antallet af kendte identen og ukendte
f.eks
ID OK UKENDT Bane1 2056 3
SELECT Ialt AS 'Ialt: ', ResourceID, antalOK AS 'OK:', antalikkeOK AS 'UKENDT:' FROM ( SELECT ResourceID, count(nullif(TransportID, ?????) antalikkeOK count(nullif(TransportID,'999999')) antalOK, count(*) Ialt FROM dbo.t_TransportIdenter (NOLOCK) WHERE LogTime BETWEEN '2005-08-25 21:00' AND '2005-08-26 06:30' AND ResourceID = 5100
GROUP BY ResourceID) s
Altså hvordan får jeg talt op i antalikkeOK når TransportIdenten er 999999
SELECT COUNT(*) AS 'Ialt: ', ResourceID, SUM(CASE TransportID WHEN NULL THEN 0 WHEN '999999' THEN 0 ELSE 1 END) AS 'OK:', SUM(CASE TransportID WHEN NULL THEN 0 WHEN NOT '999999' THEN 0 ELSE 1 END) AS 'UKENDT:' FROM dbo.t_TransportIdenter (NOLOCK) WHERE LogTime BETWEEN '2005-08-25 21:00' AND '2005-08-26 06:30' AND ResourceID = 5100 GROUP BY ResourceID
Okay, så skal vi måske prøve den anden form CASE kan tage:
SELECT COUNT(*) AS 'Ialt: ', ResourceID, SUM(CASE WHEN TransportID IS NULL THEN 0 WHEN TransportID = '999999' THEN 0 ELSE 1 END) AS 'OK:', SUM(CASE WHEN TransportID IS NULL THEN 0 WHEN TransportID <> '999999' THEN 0 ELSE 1 END) AS 'UKENDT:' FROM dbo.t_TransportIdenter (NOLOCK) WHERE LogTime BETWEEN '2005-08-25 21:00' AND '2005-08-26 06:30' AND ResourceID = 5100 GROUP BY ResourceID
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.