如下列舉了公用表/臨時表/聚合函數三個因素爲例子(覆蓋索引因素除外,有利用此類索引都會以索引順序)html
Microsoft SQL Server 2014 (SP1-GDR) (KB3194720) - 12.0.4232.0 (X64) Sep 23 2016 18:45:14 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 10240: )
--公用表表達式 --一、 ;WITH CTE AS ( SELECT 1 AS ID,2 AS ID2 UNION ALL SELECT 2 AS ID,1 AS ID2 UNION ALL SELECT 0 AS ID,0 AS ID2 ) SELECT ID2,ID FROM CTE GROUP BY ID,ID2; --二、 ;WITH CTE AS ( SELECT 1 AS ID,2 AS ID2 UNION ALL SELECT 2 AS ID,1 AS ID2 UNION ALL SELECT 0 AS ID,0 AS ID2 ) SELECT ID,ID2,COUNT(*) FROM CTE GROUP BY ID,ID2; --三、 ;WITH CTE AS ( SELECT 1 AS ID,2 AS ID2 UNION ALL SELECT 2 AS ID,1 AS ID2 UNION ALL SELECT 0 AS ID,0 AS ID2 ) SELECT ID,ID2 FROM CTE GROUP BY ID2,ID; --四、 ;WITH CTE AS ( SELECT 1 AS ID,2 AS ID2 UNION ALL SELECT 2 AS ID,1 AS ID2 UNION ALL SELECT 0 AS ID,0 AS ID2 ) SELECT ID,ID2,COUNT(*) FROM CTE GROUP BY ID2,ID;
--臨時表 IF OBJECT_ID('Tempdb..#CTE') IS NOT NULL DROP TABLE #CTE; SELECT 1 AS ID,2 AS ID2 INTO #CTE UNION ALL SELECT 2 AS ID,1 AS ID2 --五、 SELECT ID,ID2,COUNT(*) FROM #CTE GROUP BY ID,ID2; --六、 SELECT ID,ID2 FROM #CTE GROUP BY ID,ID2; --七、 SELECT ID,ID2,COUNT(*) FROM #CTE GROUP BY ID2,ID; --八、 SELECT ID,ID2 FROM #CTE GROUP BY ID2,ID;
顯示效果:sql
結論:表按分組列(group by 後)順序沒聚合函數時 從左到右,非則反之。特殊狀況CTE時按存儲顯示列(SELECT)順序從左到右
這一部分的列存儲順序函數
;WITH CTE AS ( SELECT 1 AS ID,2 AS ID2 UNION ALL SELECT 2 AS ID,1 AS ID2 UNION ALL SELECT 0 AS ID,0 AS ID2 )