【发布时间】:2017-12-19 11:41:55
【问题描述】:
我有一个整数参数 -> @Flag 我有一个具有这种结构的表:
ID Date Value_A Value_B Value_C
A 2017-07-14 1 1 1
A 2017-07-13 1 0 1
A 2017-07-12 1 0 1
我想要得到的是: - 如果参数@Flag > 0,则获取 Value_A、Value_B 或 Value_C 不具有相同值的行。在上面的示例中,如果 @Flag 为 1,则它返回第二行和第三行。 - 如果参数@Flag = 0 则返回所有行。
我正在尝试使用此脚本,但在子查询中出现错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
DECLARE @Flag INT
SET @Flag = NULL
SELECT *
FROM teste
WHERE Value_A = CASE
WHEN @Flag > 0 THEN
(SELECT Value_B FROM teste WHERE Value_A <> Value_B or Value_A <> Value_C)
ELSE (SELECT Value_A FROM teste)
END
我该怎么做?
谢谢!
【问题讨论】:
-
This 答案显示了如何在
JOIN或WHERE中使用CASE表达式。安迪的回答仍然是表达你意图的更清晰的方式。
标签: sql sql-server tsql conditional-statements