我在SQL Server中有以下行
((@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
你能帮我解决这个问题吗?
最好的问候
Milton Camara
答案 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 :(得分: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))
此致
答案 2 :(得分:1)
CASE语句是将条件置于查询中的野兽方式。您可以使用Case语句计算依赖于其他列或条件的任何新列。您还可以在SUM,AVG,count等功能中使用case语句。你也可以将case语句放在where条件中。
您可以使用以下语法..
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