Alias欄位的Where方法
通常我們在下sql時常常會下這樣的command
SELECT od.* ,
CASE
WHEN od.UnitPrice> 20 THEN 3
WHEN od.UnitPrice> 10 THEN 2
ELSE 1
END 'Level'
FROM [Order Details] od
顯示的結果就像這樣
但是如果這個時候我們需要再過濾一次只要Level > 1的呢?
一般來說應該是很直覺想要加上where去過濾Level變成
SELECT od.* ,
CASE
WHEN od.UnitPrice> 20 THEN 3
WHEN od.UnitPrice> 10 THEN 2
ELSE 1
END 'Level'
FROM [Order Details] od
WHERE Level > 2
結果會變成找不到Level這個資料行
這時候大可不必把Case整段拿到Select去過濾
只要把原本的結果當成要查詢的物件去在做select就好了
就像這樣
SELECT * FROM(
SELECT od.* ,
CASE
WHEN od.UnitPrice> 20 THEN 3
WHEN od.UnitPrice> 10 THEN 2
ELSE 1
END 'Level'
FROM [Order Details] od
) t
WHERE Level > 2