DATEDIFF和枢轴
我有这样的表(实际表大得多):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
您可以使用内部选择来获取数据到一个窗体,你有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
显然改变名称等,以适当的事情为您的数据,这仅仅是一个例子。
但是上面的脚本帐户是否有三个独立的startdate和enddates? –
@MrJohn Yup。看看我链接的小提琴,看看它在行动。 – Becuzz
谢谢!不知道我错在哪里,但感谢您的答案!我在想我的透视脚本不正确。 –
也许一个自我加入和class =每个类别,不确定。任何帮助,将不胜感激。 –