【发布时间】:2013-07-10 03:46:27
【问题描述】:
我正在尝试从 sql-2008 的项目列表和日期生成项目、日期范围摘要。
DECLARE @RoomDays AS TABLE (
[RoomID] [int] NOT NULL,
[DateOf] [date] NOT NULL,
[Segment] [char](1) NOT NULL
)
INSERT INTO @RoomDays
VALUES
('1','2013-07-03','1'),
('1','2013-07-04','1'),
('1','2013-07-05','6'),
('1','2013-07-15','6'),
('1','2013-07-16','6'),
('2','2013-07-08','1'),
('2','2013-07-09','1'),
('2','2013-07-10','6'),
('2','2013-07-11','6'),
('2','2013-07-12','1'),
('2','2013-07-13','1'),
('3','2013-07-19','6')
我想要得到的结果:
RoomID DateFrom DateThru Segments NumDays
1 2013-07-03 2013-07-05 1,1,6 3
1 2013-07-15 2013-07-16 6,6 2
2 2013-07-08 2013-07-13 1,1,6,6,1,1 6
3 2013-07-19 2013-07-19 6 1
我只是想不通如何做到这一点......
..也许这适用于 Segments 列:
(
SELECT CAST( ltrim(rtrim(SegmentID)) + ', ' AS VARCHAR(MAX))
from @RoomDays where roomid = rd.roomid
FOR XML PATH ('')
)+' ' as Segments,
--
任何帮助或指导将不胜感激。
【问题讨论】:
-
尝试查找有关“差距和岛屿”的信息。
-
如何区分结果中的第 1 行和第 2 行,因为 id 相同?
-
我在 5 月发表了一篇关于这些东西的博文。这篇文章是瑞典文的:blogs.solidq.com/SQL-Server-pa-svenska/…。我通过谷歌翻译运行它,结果很好(警告词,英语和瑞典语中的重叠词可能已在代码中翻译)。在这里查看:translate.google.com/….
标签: tsql pivot-table common-table-expression group-by