SQL - 缩短查询

时间:2014-11-17 08:45:56

标签: sql-server

我有以下查询。

with cte0 as (
    SELECT * FROM #Temp1 WHERE [Label] = 'B'
),
cte1 as (
    SELECT * FROM #Temp1 WHERE [Label] = 'A' AND [Value] > 20
)
SELECT * FROM cte0
UNION ALL
SELECT * FROM cte1

条件非常简单。我从包含两列(即[Label][Value]的表格中获取所有记录,但不包括值< 20仅适用于[Label] =" A"

的列

数据:

Label   Value
A   24
A   18
A   15
A   35
A   27
A   37
B   18
B   29
B   18
B   16
B   16

我使用上面提到的查询来做到这一点。但我想在不使用任何cte的情况下一行完成。

条件:只有[标签]具有" A",才需要选择除小于20的值以外的所有记录。要返回9行。

帮助我克服它。

提前致谢。

5 个答案:

答案 0 :(得分:2)

尝试这样的事情:

SELECT * FROM #Temp1 WHERE ([Label] = 'A' AND [Value] > 20) OR (Label] = 'B') 

答案 1 :(得分:2)

使用OR和正确的括号:

SELECT * FROM #Temp1 
WHERE  [Label] = 'B'
OR    ([Label] = 'A' AND [Value] > 20)

Demo

答案 2 :(得分:0)

试试这个:

SELECT * FROM #Temp1 WHERE [Label] = 'B'
UNION ALL
SELECT * FROM #Temp1 WHERE [Label] = 'A' AND [Value] > 20

OR

SELECT * FROM #Temp1 WHERE ([Label] = 'B' ) OR ([Label] = 'A' AND [Value] > 20)

答案 3 :(得分:0)

你可以在这里使用OR:

SELECT * FROM #Temp1 WHERE ( [Label] = 'B' ) OR ([Label] = 'A' AND [Value] > 20 )

答案 4 :(得分:0)

试试这个:

SELECT *
FROM #Temp1
WHERE Label = 'B'
OR    (Label = 'A' 
    AND value > 20)