使用SQL服務器構建在PIVOT
功能:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>,
...
[last pivoted column] AS <column name>
FROM
(<SELECT query that produces the data>)
AS <alias for the source query>
PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ([first pivoted column], [second pivoted column],
... [last pivoted column])
) AS <alias for the pivot table>
<optional ORDER BY clause>;
您可以使用PIVOT和UNPIVOT關係運算符來改變一個表值表達式到另一個表。 PIVOT通過將表達式中的一列中的唯一值轉換爲輸出中的多列來旋轉表值表達式,並在最終輸出中需要的任何剩餘列值上執行聚合。通過將表值表達式的列轉換爲列值,UNPIVOT執行與PIVOT相反的操作。
簡單的AdventureWorks例如:
-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost
FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
更復雜的例子:
USE AdventureWorks2008R2;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
([250], [251], [256], [257], [260])
) AS pvt
ORDER BY pvt.VendorID;
For more information see here
是的,你可以使用[與動態sql的樞軸功能](http://stackoverflow.com/search?tab=newest&q=%5bpivot%5d%5bsql-server%5d%20dynamic)來獲得結果。 – Taryn