使用SQL Server 2008(R2)
我有一个我需要以不同方式显示的结果集,它目前可用,如:
Resource Nr Cost StartDate EndDate
Cable_5m 8 3.5 12/03/2011 13/03/2011
Cable_5m 2 3.5 13/03/2011 14/03/2011
Rope125A 1 0 16/03/2011 18/03/2011
Rope125A 1 0 17/03/2011 17/03/2011
我需要的是报告每个资源的发送日期,如下所示:
DateOfEvnt Resource Nr Cost
2011-03-12 Cable_5m 8 3.50
2011-03-13 Cable_5m 10 3.50
2011-03-14 Cable_5m 2 3.50
2011-03-16 Rope125A 1 0.00
2011-03-17 Rope125A 2 0.00
2011-03-18 Rope125A 1 0.00
我看过枢轴,但是不能让我的生活让它工作,我不确定枢轴是我需要的。感谢所有的帮助。
答案 0 :(得分:1)
对于给定和输出,您根本不需要PIVOT
。一个简单的UNION
和GROUP BY
就足够了。
测试数据
DECLARE @Resources TABLE (
Resource VARCHAR(32)
, Nr INTEGER
, Cost FLOAT
, StartDate DATE
, EndDate DATE
)
INSERT INTO @Resources
SELECT 'Cable_5m', 8, 3.5, '03/12/2011', '03/13/2011'
UNION ALL SELECT 'Cable_5m', 2, 3.5, '03/13/2011', '03/14/2011'
UNION ALL SELECT 'Rope125A', 1, 0, '03/16/2011', '03/18/2011'
UNION ALL SELECT 'Rope125A', 1, 0, '03/17/2011', '03/17/2011'
SQL声明
SELECT DateOfEvnt
, Resource
, Nr = SUM(Nr)
, Cost
FROM (
SELECT Resource
, Nr
, Cost
, [DateOfEvnt] = StartDate
FROM @Resources
UNION ALL
SELECT Resource
, Nr
, Cost
, [DateOfEvnt] = EndDate
FROM @Resources
) r
GROUP BY
Resource
, Cost
, DateOfEvnt
修改强>
虽然UNION
和GROUP BY
满足结果,但我开始怀疑你更需要这样的事情,其中WITH
语句返回{{1}之间每天的记录}和Start-
。
EndDate