我有一个整数参数 - > @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
我该怎么做?
谢谢!
答案 0 :(得分:2)
您无法将单个值与设置为Value_A = (some set of values)
进行比较。
但在您的特定情况下根本不需要它,因为您的查询可以简化为:
SELECT *
FROM teste
where
(@Flag > 0 and ( Value_A <> Value_B or Value_A <> Value_C))
or @Flag = 0
答案 1 :(得分:0)
假设值不是NULL
,您只关心标志为0或不为零:
SELECT *
FROM teste
WHERE @Flag = 0 OR
(Value_A <> Value_B OR Value_A <> Value_C)