2016-01-29 115 views
0

我有這樣的表(實際表大得多):DATEDIFF和樞軸

id  class  startdate  enddate  
---------------------------------------- 
1  High  1/1/15  2/1/15  
1  Low  5/1/15  6/1/15  
1  Mid  6/1/15  6/10/15 

有沒有產生類似下面的結果的方式......

id High Mid low 
----------------------- 
1 30  9  30  

我下面的工作.. (只是表明我試圖通過這個工作)

SELECT DISTINCT --DATEDIFF(DAY, tt.START_DATE,tt.END_DATE)AS Stay_days, 
    tt.[high], tt.[mid], tt.[low], tt.id, 
FROM    
    (SELECT 
     [pvt_High], [pvt_mid], [pvt_low], pvt.STARTDATE, pvt.ENDDATE, pvt.id 
    FROM 
     (SELECT DISTINCT 
      l.id, L.class, l.STARTDATE, l.ENDDATE, 
      DATEDIFF(DAY, l.STARTDATE, l.ENDDATE) AS STAY_DAYS, 
      'Y' AS Flag 
     FROM TEST l 
     WHERE 1=1 

     PIVOT (MAX(Flag) FOR CLASS IN ([pvt_HIGH], [pvt_MID],[pvt_LOW])) 
     AS pvt 
    ) tt 
+0

也許一個自我加入和class =每個類別,不確定。任何幫助,將不勝感激。 –

回答

1

您可以使用內部選擇來獲取數據到一個窗體,你有id,class a天數。然後,您可以將該類的值轉換爲列。

select * 
from 
(
    select id, class, datediff(day, startDate, endDate) as days 
    from @test 
) x 
pivot 
(
    max(days) for class in (high, low, med) 
) y 

SQL Fiddle

顯然改變名稱等,以適當的事情爲您的數據,這僅僅是一個例子。

+0

但是上面的腳本帳戶是否有三個獨立的startdate和enddates? –

+0

@MrJohn Yup。看看我鏈接的小提琴,看看它在行動。 – Becuzz

+0

謝謝!不知道我錯在哪裏,但感謝您的答案!我在想我的透視腳本不正確。 –