2014-11-17 107 views
0

我有下面的查詢。SQL - 縮短查詢時間

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行。

幫我解決它。

在此先感謝。

+0

有什麼不對的CTE? –

+0

你**有**一個查詢。 –

+0

沒什麼是錯的。它的長 :)。我想縮短它因爲我有更多的100行sql查詢與更多的cte。這就是爲什麼。 – Dee

回答

2

使用OR和適當的括號:

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

Demo

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) 
2

嘗試是這樣的:

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

您可以使用或在這裏:

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

試試這個:

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