理解邏輯順序是撰寫正確查詢、排除語法錯誤的關鍵。以下為標準 SQL/TSQL 邏輯處理階段:
-- 錯誤:HAVING 階段尚未產生別名 TotalAmt
SELECT CustomerID, SUM(Amount) AS TotalAmt
FROM Orders
GROUP BY CustomerID
HAVING TotalAmt > 10000; -- Msg 207, Invalid column name 'TotalAmt'
-- 正確:重複運算式或使用子查詢/CTE
SELECT CustomerID, SUM(Amount) AS TotalAmt
FROM Orders
GROUP BY CustomerID
HAVING SUM(Amount) > 10000;
-- 或使用 CTE
WITH cte AS (
SELECT CustomerID, SUM(Amount) AS TotalAmt
FROM Orders
GROUP BY CustomerID
)
SELECT * FROM cte WHERE TotalAmt > 10000;
ORDER BY 執行於 SELECT 之後,此時結果集已包含別名欄位,故可直接引用。