由於PIVOT需要聚合,您當前的查詢將只返回每個DisposalId
的最小值/最大值。爲了得到您想要的結果,您必須創建將用作新列標題的列。
我會使用row_number()
並通過您的ReportId
分區數據。您正在使用的子查詢會稍微改變以下幾點:
SELECT [DisposalID]
,[ReportID]
, 'DisposalId'
+cast(row_number() over(partition by reportId
order by disposalid) as varchar(10)) seq
FROM [dbo].[DisposalConsolidatedView]
WHERE [ReportID]=84
見SQL Fiddle with Demo。這將創建一個值爲DisposalId1
和DisposalId2
的列 - 這些新值將成爲您的新列標題,然後您將將聚合應用於您現有的DisposalId
列。
最終的語法是:
select DisposalId1, DisposalId2, ReportId
from
(
SELECT [DisposalID]
,[ReportID]
, 'DisposalId'
+cast(row_number() over(partition by reportId
order by disposalid) as varchar(10)) seq
FROM [dbo].[DisposalConsolidatedView]
WHERE [ReportID]=84
) DataTable
PIVOT
(
Min(disposalid)
FOR seq IN (DisposalId1, DisposalId2)
) PivotTable;
見SQL Fiddle with Demo。這會給結果:
| DISPOSALID1 | DISPOSALID2 | REPORTID |
|-------------|-------------|----------|
| 242 | 243 | 84 |
完美工作就像一個魅力....一個更小的問題,如果有更多的2處置ID?它們可能有多達20個。 – user2954221
@ user2954221您將必須對PIVOT'IN'子句進行硬編碼以包含最多20個列名,或使用動態SQL來創建最終結果。這裏是我的一個動態sql示例的答案 - http://stackoverflow.com/questions/19709206/pivot-table-issue-no-identifier-in-original-table-or-enumeration/19709603#19709603 – Taryn
謝謝你非常。 – user2954221