Alias欄位的Where方法

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 

顯示的結果就像這樣

image

但是如果這個時候我們需要再過濾一次只要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這個資料行

image

這時候大可不必把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