Avatar billede kxh Nybegynder
26. august 2005 - 12:45 Der 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

hilsen

Kim
Avatar billede arne_v Ekspert
26. august 2005 - 12:52 #1
hvad med

SELECT (SELECT COUNT(*) FROM tabel WHERE is<>999999) ok,(SELECT COUNT(*) FROM tabel WHERE is=999999) notok
Avatar billede kxh Nybegynder
26. august 2005 - 13:56 #2
Den virker, men jeg ville helst hvis man kunne finde en løsning på den sætning jeg har... hvis man altså kan

// Kim
Avatar billede kjulius Novice
27. august 2005 - 02:34 #3
Kan du ikke bare gøre sådan her?

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
Avatar billede kxh Nybegynder
28. august 2005 - 17:41 #4
Hej kjulius

Så virker det som jeg gerne vil have det, tak for det.

// Kim
Avatar billede kxh Nybegynder
28. august 2005 - 20:04 #5
Hej igen

Når jeg bruger "WHEN NOT '999999'" fejer min sql... nogen ideer ??
det er en SQL Server 2000

// Kim
Avatar billede kjulius Novice
28. august 2005 - 21:56 #6
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
Avatar billede borrisholt Novice
28. august 2005 - 22:12 #7
arne>> Du plejer at vide så meget .. Hvad med den her :http://www.eksperten.dk/spm/642704

Jens B
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