2012-11-06 125 views
0

我在SQL Server中動態WHERE條件基於可變

((@data_inicial IS NULL OR @data_inicial = '') 
OR 
tbSO.dt_criacao >= CAST(@data_inicial AS DATE)) 

我需要使用領域tbSO.dt_criacao根據我收到@cod_status一個參數的後續行。

如果@cod_status = 1我必須使用tbSO.dt_criacao
如果@cod_status = 2我不得不使用tbSO.dt_abertura
如果@cod_status = 3我不得不使用tbSO.dt_fechamento

你能幫我解決這個問題?

問候

米爾頓·卡馬拉

+1

給我們整個語句 –

+1

「SQL語句」哪一個描述性標題米( – fancyPants

+0

你有非常少接受百分比..請你接受你的過去的答案問題... –

回答

2

不喜歡一個CASE語句下方滿足您的需求?你可能會有then語句設置一個變量。

CASE @cod_status 
When 1 then tbSO.dt_criacao 
When 2 Then tbSO.dt_abertura 
When 3 Then tbSO.dt_fechamento 
END 
1

希望這有助於

((@data_inicial IS NULL OR @data_inicial = '') 
OR 
(@cod_status = 1 and tbSO.dt_criacao >= CAST(@data_inicial AS DATE)) 
OR 
(@cod_status = 2 and tbSO.dt_abertura >= CAST(@data_inicial AS DATE)) 
OR 
(@cod_status = 3 and tbSO.dt_fechamento >= CAST(@data_inicial AS DATE)) 

問候

1

CASE語句是野獸的方式把條件查詢。您可以使用Case語句計算取決於其他列或條件的任何新列。你也可以在SUM,AVG,count等函數中使用case語句。你也可以把情況說明放在哪裏。

你可以用下面的語法..

SELECT * 
FROM TABLE 
WHERE 
1 = CASE 
     WHEN (
       (@data_inicial IS NULL OR @data_inicial = '') 
       OR 
       (
       CASE @cod_status 
        When 1 then tbSO.dt_criacao 
        When 2 Then tbSO.dt_abertura 
        When 3 Then tbSO.dt_fechamento 
       END >= CAST(@data_inicial AS DATE) 
       ) 
      ) THEN 1 ELSE 0 
    END