2013-05-10 8 views
1

У меня есть набор результатов, как показано ниже:Pivoting данных в 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 –

ответ

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 union all ** 2. Что делать, если значения столбцов изменены. он обязан ** терпеть неудачу в 90 случаях из 100 ** – Luv

+0

Я не знаю о стержне, что я написал так. – Dhinakar

+0

Я не запускал это, он должен выполнять эту работу, но он не масштабируется. –