SQL case met as

Status
Niet open voor verdere reacties.

RolandPricken

Gebruiker
Lid geworden
17 sep 2010
Berichten
49
Hallo,

Na lange tijd nog eens een vraagje:

case when (SPAREPARTDIRECTION = 1) then COUNT(PICKINGLISTID) as 'nieuw' else COUNT(PICKINGLISTID) as 'old' end

Ik wil graag bovenstaande sql case gebruiken maar helaas is het niet zo simpel.

Ik zou als uitkomst van de query graag zien dat hij indien SPAREPARTDIRECTION = 1 een count maakt van PICKINGLISTID en die kolom de naam 'nieuw' geeft, indien niet aan deze voorwaarde voldaan wordt dat hij ook een count maakt van PICKINGLISTID maar dat hij dit plaatst in de kolom met de naam 'oud'.

Is dit mogelijk? En zo ja, hoe?


Alvast bedankt.
 
Wat wil je doen met de output? verwacht je beide kolommen in de select of een enkele?

[sql]
SELECT
COUNT(CASE
WHEN sparepartdirection = 1 then 1
END) as nieuw ,
COUNT(CASE
WHEN sparepartdirection <> 1 then 1
END) as oud
FROM lijst
[/sql]

Dat maakt een kolom oud en nieuw en telt hoeveel van elk
 
Laatst bewerkt:
Ik verwacht inderdaad beide kolommen in de select.

Hij moet een count over PICKINGLISTID maken als SPAREPARTDIRECTION = 1 (natuurlijk alleen van PICKINGLISTID die aan de voorwaarde SPAREPARTDIRECTION = 1 voldoen) en deze de naam 'nieuw' geven.

Hij moet een count over PICKINGLISTID maken als SPAREPARTDIRECTION = 0 (natuurlijk alleen van PICKINGLISTID die aan de voorwaarde SPAREPARTDIRECTION = 0 voldoen) en deze de naam 'oud' geven.

Ultiem doel is om beide counts op elkaar te kunnen delen (reportbuilder).
 
In principe doet deze code dat. Je kunt specifiek de tweede case van <>1 aanpassen naar = 0.

Met een subselect (en afhankelijk database) kan dat eventueel in een enkele query, maar qua overhead zou ik de deling doen in je code.

*edit* ik zie net dat er een komma mist in mijn voorbeeld. waarschijnlijk per ongeluk gedelete bij het formateren
 
Laatst bewerkt:
Hoe moet de sql er dan uitzien?

Ik probeerde het op de volgende 2 manieren maar beide werkten niet


Manier 1:
SELECT
COUNT(case(dbo.PICKINGLISTID) when dbo.SPAREPARTDIRECTION = 1 then 1 end) as nieuw,
FROM


Manier 2:
SELECT
COUNT(dbo.PICKINGLISTID) (case when (dbo.SPAREPARTDIRECTION = 0 then 0) end) as oud,
FROM
 
De gehele SQL zoals die er nu staat (ik heb mijn orginele voorbeeld aangepast)

SELECT COUNT(CASE WHEN sparepartdirection = 1 then 1 END) AS nieuw , COUNT(CASE WHEN sparepartdirection = 0 then 1 END) AS oud FROM lijst
 
Ik voer het als volgt in:

SELECT

COUNT(case(dbo.PICKINGLISTID) when dbo.SPAREPARTDIRECTION = 1 then 1 end) as nieuw,
COUNT(case(dbo.PICKINGLISTID) when dbo.SPAREPARTDIRECTION = 0 then 1 end) as oud,

FROM

Er staat wel nog wat voor en achter de 2 counts maar dat moet t probleem niet zijn. Hij zegt dat de "=" niet goed is:
Msg 102, Level 15, State 1, Line 10
Incorrect syntax near '='.
 
waarom zet je er (dbo.pickinglistid) voor?

SELECT

COUNT(case when dbo.SPAREPARTDIRECTION = 1 then 1 end) as nieuw,
COUNT(case when dbo.SPAREPARTDIRECTION = 0 then 1 end) as oud,

FROM

zou voldoende moeten zijn. Is sparepartdirection een kolom in de tabel dbo? Ik heb mijn code getest op mijn mysql database en daar werkt het zoals verwacht.
 
Ah dankje, hij doet het nu wel.
Ik plaatste die (dbo.pickinglistid) erbij omdat ik dacht dat je moest aangeven waar hij een count van moet maken
 
De count word gemaakt door "then 1"

in principe kun je ook "SUM" gebruiken in dit geval, zolang je maar "then 1" als telfactor gebruikt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan