SQL Server选择CASE WHEN where where condition

时间:2015-02-20 04:02:42

标签: sql-server-2012

我的代码就像这样

SELECT A, B, C 
FROM tb_1 
WHERE C = (SELECT CASE WHEN (B > C) THEN C ELSE NULL END FROM tb_2)

我想从tb_1中选择具有指定条件的行。当子查询的结果是C列的值时,它运行良好。但是当结果为NULL时,它无法选择数据。因为SQL Server无法执行类似这样的操作

SELECT A, B, C 
FROM tb_1 
WHERE C = NULL

但是,它应该是这样的

SELECT A, B, C 
FROM tb_1 
WHERE C IS NULL

任何人都可以帮助我吗?我仍然想要将子查询(select case case)插入到那个条件

由于

1 个答案:

答案 0 :(得分:0)

tb_2设计不清楚你的问题。假设tb_2结构与tb_1相同,我认为以下内容可行,但这一切都取决于您的数据(尤其是列C中的值)。例如,如果C中保存的值永远不会是-9999,那么您可以在ISNULL子句中使用WHERE,如下所示。但是,我建议尽可能避免使用子查询。

WHERE ISNULL(C, -9999) IN (SELECT CASE WHEN (B > C) THEN ISNULL(C, -9999) ELSE -9999 END FROM @t2)

插图:

GO
DECLARE @T1 TABLE (A INT, B INT, C INT)
INSERT INTO @T1 (A, B)VALUES (10, 20),(1, 2)

DECLARE @T2 TABLE (A INT, B INT, C INT)
INSERT INTO @T2 (A, B)VALUES (10, 20),(1, 2)

SELECT A, B, C 
FROM @t1 
WHERE ISNULL(C, -9999) IN (SELECT CASE WHEN (A > B) THEN ISNULL(C, -9999) ELSE -9999 END FROM @t2)