我在數據庫視圖有這個元素視圖元素:如何使用內部Where子句中SQL
CASE
WHEN Type = 'Reserved' THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END AS isReserved,
我想用我的WHERE子句中的列isReserved。我怎樣才能做到這一點?謝謝。
我在數據庫視圖有這個元素視圖元素:如何使用內部Where子句中SQL
CASE
WHEN Type = 'Reserved' THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END AS isReserved,
我想用我的WHERE子句中的列isReserved。我怎樣才能做到這一點?謝謝。
您可以使用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結果。這樣就可以使用索引。
你不能直接做。
要麼包含子查詢。
SELECT *
FROM (SELECT <something> as newAlias FROM YourTable) as T
WHERE T.newAlias = ....
或重複剛纔的定義
SELECT *
FROM YourTable
WHERE <something> = ....
您可以使用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)
導致使用子查詢,CTE,或重複把定義。 –