【发布时间】:2017-09-21 16:49:26
【问题描述】:
我有一个表,其中存储了一个节目剧集的一行。请注意,并非每一集都被存储。
showID | viewerID | episodeNumber | episodeDescription
____________________________________________________________________
15 | ID-123 | 1 | Scary
____________________________________________________________________
15 | ID-123 | 3 | Funny
我构建了一个透视查询来为剧集编号和描述创建列。剧集数是已知数量。
showID | viewerID | episode1 | episode2 | episode3
__________________________________________________________________________
15 | ID-123 | Scary | funny |
我的问题是,在没有记录的情况下,如本例中第一个表中缺少第 2 集的行所示,查询不会创建“占位符”,而是将数据将第 3 集放入第 2 集列。我什至不知道我需要什么是可能的——但我确实需要以某种方式确保在剧集编号没有数据(无行)时,剧集编号与正确的描述相关联,我确实需要为表 2 中的每一集显示一列(因此在上面的表 2 中,episode2 的字段应为空白)。
我的查询如下:
SELECT viewerID, showID,
episodeDescription1, episodeDescription2, episodeDescription3
FROM
(
SELECT viewerID, showID, col+cast(seq as varchar(10)) as col, value
from
(
SELECT viewerID, showID, episodeNumber, episodeDescription,
row_number() over(partition by showID
order by episodeNumber) seq
FROM tbl_showEpisodes
) d
CROSS APPLY
(
SELECT 'episodeNumber', cast(episodeNumber as varchar(20))
UNION ALL
SELECT 'episodeDescription', episodeDescription
) c (col, value)
) src
pivot
(
MAX(value)
for col in (
episodeNumber1, episodeDescription1, episodeNumber2,
episodeDescription2, episodeNumber3, episodeDescription3)
) piv;
我希望这很清楚,并提前感谢您的帮助!使用 SQL Server 2012。
【问题讨论】:
标签: sql sql-server-2012 pivot