webForumDet fria alternativet

Dual COUNT() i samma SELECT

4 svar · 368 visningar · startad av freddyk

freddykMedlem sedan okt. 2006103 inlägg
#1

Hallå gubbar o gummor,

Behöver er hjälp. Jag försöker få till 2 counts i en och samma select-sats men resultatet blir skevt. Får samma tal för varje kund...

Jag vill få fram kundnr, antal SLP, antal LP ( i den ordningen).

Vad har jag missat. Har dunkat mitt huvud i väggen några gånger idag på detta. Har ju gjort detta tidigare med annan kod och då har det gått igenom korrekt... men inte nu... hmm..

Kör SQL server 2005

Tacksam för all hjälp...

/RED
Det hela är ett litet lagersystem som ska räkna ihop antal sammansatta lagerplatser samt tot antal lagerplatser kopplade till varje lagrad kund

SELECT dbo.kund.kundNr,(SELECT COUNT(DISTINCT dbo.lagerplats.LPExpID)
FROM         dbo.lagerplats	INNER JOIN dbo.lagerplatsBrochure ON dbo.lagerplats.LPExpID = dbo.lagerplatsBrochure.fk_lpID INNER JOIN
                      dbo.brochureLanguage ON dbo.lagerplatsBrochure.fk_brSLank = dbo.brochureLanguage.brLExpID INNER JOIN
                      dbo.brochure ON dbo.brochure.brochID = dbo.brochureLanguage.fk_brochureID INNER JOIN
                      dbo.kund ON dbo.kund.kundNr = dbo.brochure.brochKundNr
WHERE dbo.lagerplats.sammansatt = '1' AND dbo.kund.kundNr = kundNr) AS SLP, (SELECT COUNT(DISTINCT dbo.lagerplats.LPExpID)
FROM         dbo.lagerplats	INNER JOIN dbo.lagerplatsBrochure ON dbo.lagerplats.LPExpID = dbo.lagerplatsBrochure.fk_lpID INNER JOIN
                      dbo.brochureLanguage ON dbo.lagerplatsBrochure.fk_brSLank = dbo.brochureLanguage.brLExpID INNER JOIN
                      dbo.brochure ON dbo.brochure.brochID = dbo.brochureLanguage.fk_brochureID INNER JOIN
                      dbo.kund ON dbo.kund.kundNr = dbo.brochure.brochKundNr
WHERE dbo.kund.kundNr = kundNr) AS LagerPlats
FROM         dbo.lagerplats	INNER JOIN dbo.lagerplatsBrochure ON dbo.lagerplats.LPExpID = dbo.lagerplatsBrochure.fk_lpID INNER JOIN
                      dbo.brochureLanguage ON dbo.lagerplatsBrochure.fk_brSLank = dbo.brochureLanguage.brLExpID INNER JOIN
                      dbo.brochure ON dbo.brochure.brochID = dbo.brochureLanguage.fk_brochureID INNER JOIN
                      dbo.kund ON dbo.kund.kundNr = dbo.brochure.brochKundNr
emissionMedlem sedan dec. 19996 721 inlägg
#2
SELECT k.kundNr,COUNT(DISTINCT CASE WHEN lp.sammansatt = '1' THEN lp.LPExpID ELSE NULL END) as SLP,COUNT(DISTINCT lp.LPExpID) as LP
FROM   dbo.kund k
LEFT OUTER JOIN dbo.brochure b ON  k.kundNr = b.brochKundNr
LEFT OUTER JOIN dbo.brochureLanguage bl ON b.brochID = bl.fk_brochureID
LEFT OUTER JOIN dbo.lagerplatsBrochure lpb ON bl.brLExpID = lpb.fk_brSLank
LEFT OUTER JOIN dbo.lagerplats lp ON lp.LPExpID = lpb.fk_lpID
freddykMedlem sedan okt. 2006103 inlägg
#3

emission skrev:

SELECT k.kundNr,COUNT(DISTINCT CASE WHEN lp.sammansatt = '1' THEN lp.LPExpID ELSE NULL END) as SLP,COUNT(DISTINCT lp.LPExpID) as LP
FROM   dbo.kund k
LEFT OUTER JOIN dbo.brochure b ON  k.kundNr = b.brochKundNr
LEFT OUTER JOIN dbo.brochureLanguage bl ON b.brochID = bl.fk_brochureID
LEFT OUTER JOIN dbo.lagerplatsBrochure lpb ON bl.brLExpID = lpb.fk_brSLank
LEFT OUTER JOIN dbo.lagerplats lp ON lp.LPExpID = lpb.fk_lpID

Kungligt! Tack så oerhört mkt emission! :birp Det fungerade utmärkt! Körde huvudet i väggen så många ggr igår så jag inte ens reflekterade över att alla inte har sammansatta LP. (y)

Eller som Homer skulle sagt : Doh!

RED/
Ett litet tillägg...
Kan jag på ngt sätt begränsa urvalet till att endast visa de kundnr som har LP?

freddykMedlem sedan okt. 2006103 inlägg
#4

Löste det.

Körde

 HAVING (COUNT(DISTINCT lp.LPExpID) > 0)

på slutet

emissionMedlem sedan dec. 19996 721 inlägg
#5

freddyk skrev:

Kan jag på ngt sätt begränsa urvalet till att endast visa de kundnr som har LP?

Du uppnår det genom att göra om alla LEFT OUTER till INNER

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)