由于 PIVOT 需要聚合,因此您当前的查询将仅返回 each 的最小值/最大值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 |