2016-11-08 72 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