2017-01-23 18 views
1

我在數據庫視圖有這個元素視圖元素:如何使用內部Where子句中SQL

CASE 
    WHEN Type = 'Reserved' THEN CAST(1 AS bit) 
    ELSE CAST(0 AS bit) 
    END AS isReserved, 

我想用我的WHERE子句中的列isReserved。我怎樣才能做到這一點?謝謝。

+2

導致使用子查詢,CTE,或重複把定義。 –

回答

3

您可以使用CROSS APPLY ... VALUES(在SQL Server - 沒有注意到它沒有標記爲任何特定的DBMS)

SELECT isReserved 
FROM YourTable 
     CROSS APPLY (VALUES(CASE WHEN Type = 'Reserved' THEN CAST(1 AS BIT) 
          ELSE CAST(0 AS BIT) 
          END)) CA(isReserved) 
WHERE isReserved = 1 

但你最好直接在你的WHERE子句中使用Type = 'Reserved'等,而不是直接引用CASE結果。這樣就可以使用索引。

1

你不能直接做。

要麼包含子查詢。

SELECT * 
FROM (SELECT <something> as newAlias FROM YourTable) as T 
WHERE T.newAlias = .... 

或重複剛纔的定義

SELECT * 
FROM YourTable 
WHERE <something> = .... 
1

您可以使用WHERE子句,和的Oracle SQL不會再計算它一樣的表情,它會被從緩存中

select CASE 
    WHEN Type = 'Reserved' THEN CAST(1 AS bit) 
    ELSE CAST(0 AS bit) 
    END AS isReserved 
from tablename 
where CASE 
    WHEN Type = 'Reserved' THEN CAST(1 AS bit) 
    ELSE CAST(0 AS bit) 
    END=CAST(0 AS bit)