彙整四個實用查詢技巧:月底日期查詢新函數、HAVING/WHERE 差異、INSERT TOP 效能、COUNT DISTINCT/ALL 行為。
舊寫法需 DATEADD(MONTH, DATEDIFF(MONTH, '19991231', date), '19991231'),SQL Server 2012+ 直接用:
WHERE orderdate = EOMONTH(orderdate)
簡潔、可讀、效能相同。
| 比較項 | WHERE | HAVING |
|---|---|---|
| 適用陳述式 | SELECT/UPDATE/DELETE | 僅 SELECT |
| 執行順序 | GROUP BY 之前 | GROUP BY 之後 |
| 彙總函數 | 不可直接使用 | 可直接使用 |
口訣:WHERE 過濾列,HAVING 過濾群組/彙總。
-- 方案一:SELECT TOP 先排序再取前 N
INSERT INTO Target SELECT TOP (2) ID FROM Source ORDER BY ID DESC
-- 方案二:INSERT TOP 直接取前 N(忽略 ORDER BY)
INSERT TOP (2) INTO Target SELECT ID FROM Source ORDER BY ID DESC
實測方案二開銷較低,但不保證順序。需有序插入請用方案一。
COUNT(欄位) ≡ COUNT(ALL 欄位):統計非 NULL 個數(含重複)COUNT(DISTINCT 欄位):統計非 NULL 不重複值個數ALL 為預設關鍵字,可省略掌握這些細節,能寫出更精確、高效的查詢語句。