SQL 服务器 Select CASE WHEN inside where 条件
SQL Server Select CASE WHEN inside where condition
我的代码是这样的
SELECT A, B, C
FROM tb_1
WHERE C = (SELECT CASE WHEN (B > C) THEN C ELSE NULL END FROM tb_2)
我想 select 符合指定条件的 tb_1
行。当子查询的结果是 C 列的值时,它工作得很好。但是当结果为 NULL 时,它不能 select 数据。因为SQL服务器不能执行这样的东西
SELECT A, B, C
FROM tb_1
WHERE C = NULL
但是,应该是这样的
SELECT A, B, C
FROM tb_1
WHERE C IS NULL
有人可以帮助我吗?我仍然想向该条件插入子查询(select case when)
谢谢
table tb_2
设计从你的问题中看不清楚。假设 tb_2
结构与 tb_1
相同,我认为以下内容可行,但这完全取决于您的数据(尤其是 C
列中的值)。例如,如果 C
中保存的值永远不会是 -9999,那么您可以在 WHERE
子句中使用 ISNULL
,如下所示。但是,我建议尽可能避免子查询。
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)
我的代码是这样的
SELECT A, B, C
FROM tb_1
WHERE C = (SELECT CASE WHEN (B > C) THEN C ELSE NULL END FROM tb_2)
我想 select 符合指定条件的 tb_1
行。当子查询的结果是 C 列的值时,它工作得很好。但是当结果为 NULL 时,它不能 select 数据。因为SQL服务器不能执行这样的东西
SELECT A, B, C
FROM tb_1
WHERE C = NULL
但是,应该是这样的
SELECT A, B, C
FROM tb_1
WHERE C IS NULL
有人可以帮助我吗?我仍然想向该条件插入子查询(select case when)
谢谢
table tb_2
设计从你的问题中看不清楚。假设 tb_2
结构与 tb_1
相同,我认为以下内容可行,但这完全取决于您的数据(尤其是 C
列中的值)。例如,如果 C
中保存的值永远不会是 -9999,那么您可以在 WHERE
子句中使用 ISNULL
,如下所示。但是,我建议尽可能避免子查询。
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)