webForumDet fria alternativet

Select case

8 svar · 156 visningar · startad av theguru

theguruMedlem sedan juli 2000412 inlägg
#1

Kan nån hjälpa mig?

Jag försöker att i en select sats efter where gör ett vilkor med hjälp av.
Jag vet inte exaxt hur man skriver men jag tänkte mig nåt åt det här hållet.

SELECT CASE @statusid = 10
AND S.StatusId <> 10

för att sedan fortsätta med where satsen.
Jag ser fram emot att se hur jag ska skriva :)

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Jag förstår inte alls vad du vill åstadkomma.

case kan man använda så här t.ex.

  select case when @statusid <= 10 then 'Green'
         when @statusid <= 20 then
   'blue'
else 'Magenta' end from ogrish

Kan du förklara lite mer?

------------------
essentitia preter non sans multiplicandum

theguruMedlem sedan juli 2000412 inlägg
#3

WHERE
A.qqqq = ACS.qqqq
AND S.StatusId = ACS.StatusId
SELECT CASEwhen @statusid <> 10 then AND S.StatusId <> 10
AND A.OwnerId = O.OwnerId

Jag vill alltså lägga till argumentet
AND S.StatusId <> 10
om statusid <> 10

LarsGMedlem sedan dec. 200012 465 inlägg
#4
WHERE 
A.qqqq = ACS.qqqq
AND S.StatusId = ACS.StatusId 
AND ((    S.StatusId <> 10 
      and @Statusid <> 10) 
   or @statusid = 10)

------------------
essentitia preter non sans multiplicandum

theguruMedlem sedan juli 2000412 inlägg
#5

Detta funkar inte riktigt.
Jag vill enbart ha med
@statusid = 10 när det inträffar
annars vill jag utesluta detta ur
where satsen

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Vad menar du med att det inte fungerar?

Du kan inte använda case på det sättet som du har tänkt dig. case evalueras när frågan exekveras och inte när den kompileras.

Om du vill ha olika frågor så kan du skriva

if @statusID <> 10
  select ... where ... and statusID <> 10
else
  select ...where ...

------------------
essentitia preter non sans multiplicandum

theguruMedlem sedan juli 2000412 inlägg
#7

Det har löst sig tack för hjälpen.

spangoMedlem sedan juni 20006 147 inlägg
#8

Av ren nyfikenhet, borde man inte kunna säga

SELECT foo FROM bar WHERE (@statusId = 10 OR statusId <> 10)

:q

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

LarsGMedlem sedan dec. 200012 465 inlägg
#9

Kanske det går i detta fall. Det blir dock skillnad om @statusid är null

------------------
essentitia preter non sans multiplicandum

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb