2016-01-29 99 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

谢谢!不知道我错在哪里,但感谢您的答案!我在想我的透视脚本不正确。 –