我的代码就像这样
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)插入到那个条件
由于
答案 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)