比方說,我有這個疑問,情況,即隨着多個值
SELECT T.A FROM T WHERE T.A IN (CASE WHEN T.B = 1 THEN (1,2,3) ELSE (4,5) END)
是否有可能或此查詢任何替代。
比方說,我有這個疑問,情況,即隨着多個值
SELECT T.A FROM T WHERE T.A IN (CASE WHEN T.B = 1 THEN (1,2,3) ELSE (4,5) END)
是否有可能或此查詢任何替代。
不要在where子句
SELECT T.A FROM T WHERE (T.A IN (1,2,3) And T.B = 1) or (T.A in (4,5) and T.B <>1)
您可以在'WHERE'中使用'CASE'。問題是'CASE'子句可以將「結果」作爲單個值,而不是複合值。 –
我說不要在where子句中使用case,因爲和&或者做很多事情更快 – 2012-06-20 06:33:10
您的查詢不等同於OP的。它會顯示一行'A = 4和B = 1',而OP的則不會(如果有效的話)。 –
SELECT T.A
FROM T
WHERE T.B = 1 AND T.A IN (1,2,3)
OR T.B <> 1 AND T.A IN (4,5)
OR T.B IS NULL AND T.A IN (4,5) ;
CASE
是表達用例 - 它返回一個良好定義的類型的單個結果:
求值的列表條件並返回多個可能的結果表達式之一。
對於一些複雜的WHERE
條款,它可能是有意義的使用它(您目前可以不得到解決,如@Somebody正處於困境的答案所示),但你需要構建它返回一個結果值或表達:
SELECT T.A FROM T WHERE
1 = CASE
WHEN T.B = 1 AND T.A IN (1,2,3) THEN 1
WHEN T.A IN (4,5) THEN 1
END
我不認爲OP有一個'A = 4和B = 1'的行。 –
@ypercube - 可能是這樣 - 但是'CASE'表達式按照他們似乎想要的那樣工作,它會在結果集中。 –
它不工作? – 2012-06-20 06:27:57
不幸的沒有。 – user960567