Case in una where

martedì 23 dicembre 2008 - 16.25

memmo77 Profilo | Expert

Sto tentanto di fare una case nella clausula where

WHERE
VAL.FK_ID_ENTE = 1
AND AGGR_PROC_STR.ID_PROC_STR = 1
AND VAL.FK_MESE = 6
AND AGGR.STEP IN(
CASE @TIPO_ANALISI
WHEN 'A' THEN
CASE @PILASTRO
WHEN 1 THEN 1
WHEN 2 THEN 2, 3
END
END
)

Mi va logicamente in errore al punto WHEN 2 THEN 2, 3 come posso risolvere? Grazie

alx_81 Profilo | Guru

>Sto tentanto di fare una case nella clausula where
>
>WHERE
> VAL.FK_ID_ENTE = 1
> AND AGGR_PROC_STR.ID_PROC_STR = 1
> AND VAL.FK_MESE = 6
> AND AGGR.STEP IN(
> CASE @TIPO_ANALISI
> WHEN 'A' THEN
> CASE @PILASTRO
> WHEN 1 THEN 1
> WHEN 2 THEN 2, 3
> END
> END
>)
>
>Mi va logicamente in errore al punto WHEN 2 THEN 2, 3 come posso
>risolvere?
Io farei proprio in un altro modo. Visto che sembra essere SQL Server, farei una stored procedure come quella che segue:

CREATE PROC dbo.proc_ProvaCase @TIPO_ANALISI char(1) , @PILASTRO tinyint AS BEGIN SET NOCOUNT ON; DECLARE @temp TABLE (pilastro tinyint) IF @TIPO_ANALISI = 'A' IF @PILASTRO = 1 INSERT INTO @temp (pilastro) VALUES (1) ELSE IF @PILASTRO = 2 BEGIN INSERT INTO @temp (pilastro) VALUES (2) INSERT INTO @temp (pilastro) VALUES (3) END -- qui fai la tua select /* SELECT <campi> FROM <tabella> WHERE VAL.FK_ID_ENTE = 1 AND AGGR_PROC_STR.ID_PROC_STR = 1 AND VAL.FK_MESE = 6 AND AGGR.STEP IN(SELECT pilastro FROM @temp) oppure puoi andare in join con @temp direttamente. */ END

>Grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5