2013-05-10 52 views
1

我有一個結果集象下面這樣:在SQL Server的樞轉數據2008

MinID  MaxID ColumnName 
---------- ------- ------------------- 
167   34458 AccountManager 
174   174  ClientDeliveryDate 
184   184  LocalContactEmail 
192   34459 ProjectDeveloper 
194   194  ServiceType 

我想要一個結果集,如:

AccountManager ClientDeliveryDate LocalContactEmail ProjectDeveloper ServiceType 
-------------- ------------------ ----------------- ---------------- ----------- 
167   174    184    192    194 
34458   174    184    34459   194 
+0

轉到http://msdn.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx – 2013-05-10 08:42:04

回答

7
select [AccountManager], [ClientDeliveryDate], [LocalContactEmail],[ProjectDeveloper] ,[ServiceType] 
from 
(
    SELECT ColumnName, TestType, score 
    FROM 
    (
     SELECT ColumnName, MinID, MaxID from table_name 
    ) PivotData 
    UNPIVOT 
    (
     score for TestType IN (MinID, MaxID) 
    ) as initialUnPivot 
) as PivotSource 
PIVOT 
(
MIN(score) FOR ColumnName IN ([AccountManager], [ClientDeliveryDate], [LocalContactEmail],[ProjectDeveloper] ,[ServiceType]) 
) AS PivotTable 
order by [AccountManager] desc 

SQL FIDDLE

-1

試試這個查詢。

SELECT 
max(case when `ColumnName` = 'AccouontManager' then `MaxID` end) as AccouontManager, 
max(case when `ColumnName` = 'ClientDeliveryDate' then `MaxID` end) as ClientDeliveryDate, 
max(case when `ColumnName` = 'LocalContactEmail' then `MaxID` end) as LocalContactEmail, 
max(case when `ColumnName` = 'ProjectDeveloper' then `MaxID` end) as ProjectDeveloper, 
max(case when `ColumnName` = 'ServiceType' then `MaxID` end) as ServiceType 
FROM `your_table` 
union all 
SELECT 
max(case when `ColumnName` = 'AccouontManager' then `MinID` end) as AccouontManager, 
max(case when `ColumnName` = 'ClientDeliveryDate' then `MinID` end) as ClientDeliveryDate, 
max(case when `ColumnName` = 'LocalContactEmail' then `MinID` end) as LocalContactEmail, 
max(case when `ColumnName` = 'ProjectDeveloper' then `MinID` end) as ProjectDeveloper, 
max(case when `ColumnName` = 'ServiceType' then `MinID` end) as ServiceType 
FROM `your_table` 
+0

如果什麼有** 10列。** 1。你會寫** 10聯合所有** 2.如果列值改變了怎麼辦?它肯定會在100個失敗的90個案例中失敗** – Luv 2013-05-10 08:54:17

+0

我不知道關於數據透視是什麼,我是這樣寫的。 – Dhinakar 2013-05-10 08:57:49

+0

我沒有運行這個,它應該做的工作,但它不可擴展。 – 2013-05-10 08:58:50