SQL - 缩短查询

  • 本文关键字:查询 SQL 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 行。

帮助我克服它。

提前谢谢。

使用OR和正确的括号:

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

演示

尝试这样的事情:

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

试试这个:

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

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

你可以在这里使用OR:

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

试试这个:

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

最新更新