如何将行转置为列?
How do I transpose rows into columns?
可能很简单,有没有一种方法可以快速转置我的数据,使其跨行读取而不是按行读取。
以上是当前输出,但希望它能够读取,例如
AttendanceNumber, ExamDate, ExamCode1, ExamCode2, ExamCode3, .......ExamCode20
我的 sql 是
SELECT [AttendanceNumber]
,[ExaminationDate]
,[ExamExaminationCode]
FROM [Radiotherapy].[dbo].[tblRadiologyData] rd
where rd.ExaminationDate >= '01 april 2016'
and rd.AttendanceSiteCode IN('CNM','RNM')
ORDER BY rd.LocalPatientIdentifier, rd.ExaminationDate
您可以将条件聚合与 ROW_NUMBER()
一起使用:
SELECT s.attendanceNumber,s.examinationDate,
MAX(CASE WHEN s.rnk = 1 THEN s.ExamExaminationCode END) as examCode1,
MAX(CASE WHEN s.rnk = 2 THEN s.ExamExaminationCode END) as examCode2,
MAX(CASE WHEN s.rnk = 3 THEN s.ExamExaminationCode END) as examCode3,
..... As many as you need
FROM (
SELECT [AttendanceNumber]
,[ExaminationDate]
,[ExamExaminationCode]
,ROW_NUMBER() OVER(PARTITION BY [AttendanceNumber] ORDER BY [ExaminationDate]) as rnk --Ordered by date ASC
FROM [Radiotherapy].[dbo].[tblRadiologyData] rd
where rd.ExaminationDate >= '01 april 2016'
and rd.AttendanceSiteCode IN('CNM','RNM') ) s
GROUP BY s.attendanceNumber,s.examinationDate
可能很简单,有没有一种方法可以快速转置我的数据,使其跨行读取而不是按行读取。
以上是当前输出,但希望它能够读取,例如
AttendanceNumber, ExamDate, ExamCode1, ExamCode2, ExamCode3, .......ExamCode20
我的 sql 是
SELECT [AttendanceNumber]
,[ExaminationDate]
,[ExamExaminationCode]
FROM [Radiotherapy].[dbo].[tblRadiologyData] rd
where rd.ExaminationDate >= '01 april 2016'
and rd.AttendanceSiteCode IN('CNM','RNM')
ORDER BY rd.LocalPatientIdentifier, rd.ExaminationDate
您可以将条件聚合与 ROW_NUMBER()
一起使用:
SELECT s.attendanceNumber,s.examinationDate,
MAX(CASE WHEN s.rnk = 1 THEN s.ExamExaminationCode END) as examCode1,
MAX(CASE WHEN s.rnk = 2 THEN s.ExamExaminationCode END) as examCode2,
MAX(CASE WHEN s.rnk = 3 THEN s.ExamExaminationCode END) as examCode3,
..... As many as you need
FROM (
SELECT [AttendanceNumber]
,[ExaminationDate]
,[ExamExaminationCode]
,ROW_NUMBER() OVER(PARTITION BY [AttendanceNumber] ORDER BY [ExaminationDate]) as rnk --Ordered by date ASC
FROM [Radiotherapy].[dbo].[tblRadiologyData] rd
where rd.ExaminationDate >= '01 april 2016'
and rd.AttendanceSiteCode IN('CNM','RNM') ) s
GROUP BY s.attendanceNumber,s.examinationDate