2016-11-08 63 views
3

可能是一个简单的,有没有办法快速转置我的数据,以便它读取而不是按行读取。如何将行转换为列?

enter image description here

以上是电流输出,但希望它跨越例如读取

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 

回答

1

可以使用条件的聚集与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 
+0

Wow work great,so now I have my data,there is possible to show the number of combinations and a count(例如, ExamCode1,ExamCode2组合发生x次。 – Simon

+0

@Simon我不知道我明白你的需要..你是什么意思的组合? – sagi

+0

它的好解决了它,但没有办法排列顺序考虑日期是相同的每个出席号码,所以每次我运行它它给了我不同的输出! – Simon