我希望通过我的表中的一些列来转置。我有类似下面的例子:
╔════════╦═══════╦══════╦══════╦═════════╦══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╗
║ name ║ week ║ colX ║ ColY ║ Col.... ║ ColZ ║ Day 1 ║ Day 2 ║ Day 3 ║ Day 4 ║ Day 5 ║ Day 6 ║ Day 7 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name x ║ week1 ║ xxx ║ yyy ║ .... ║ zzz ║ 0 ║ 5 ║ 0 ║ 0 ║ 0 ║ 0 ║ 0 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name Y ║ week1 ║ xxx ║ yyy ║ .... ║ zzz ║ 4 ║ 0 ║ 0 ║ 0 ║ 0 ║ 0 ║ 0 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name Z ║ week1 ║ xxx ║ yyy ║ .... ║ zzz ║ 0 ║ 0 ║ 5 ║ 0 ║ 5 ║ 0 ║ 0 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name x ║ week2 ║ xxx ║ yyy ║ .... ║ zzz ║ 0 ║ 0 ║ 0 ║ 5 ║ 5 ║ 0 ║ 0 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name Y ║ week2 ║ xxx ║ yyy ║ .... ║ zzz ║ 5 ║ 0 ║ 0 ║ 0 ║ 4 ║ 0 ║ 0 ║
╠════════╬═══════╬══════╬══════╬═════════╬══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╬═══════╣
║ name Z ║ week2 ║ xxx ║ yyy ║ .... ║ zzz ║ 0 ║ 4 ║ 5 ║ 4 ║ 0 ║ 0 ║ 2 ║
╚════════╩═══════╩══════╩══════╩═════════╩══════╩═══════╩═══════╩═══════╩═══════╩═══════╩═══════╩═══════╝我希望有转置的信息显示1天每行和其余的信息是,我理解这将创建更多的行,但将有助于保持更清晰的信息。
右侧每行显示1周,然后是该周的7天,以及分配给每个项目的每一天的小时数(假设是通过colX值)。我试图仅按天转置,但我不知道如何仅对少数几个值使用pivot。
发布于 2020-07-28 20:15:25
以下是您的数据的示例:
with t as (
select ' name x ' name,' week1 ' week,' xxx ' colx,' yyy ' coly,' .... ' colxyz,' zzz ' colz,' 0 'day1, ' 5 'day2, ' 0 'day3, ' 0 'day4, ' 0 ' day5,' 0 ' day6, ' 0 ' day7 union all
select ' name Y ',' week1 ',' xxx ',' yyy ',' .... ',' zzz ',' 4 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ' union all
select ' name Z ',' week1 ',' xxx ',' yyy ',' .... ',' zzz ',' 0 ',' 0 ',' 5 ',' 0 ',' 5 ',' 0 ',' 0 ' union all
select ' name x ',' week2 ',' xxx ',' yyy ',' .... ',' zzz ',' 0 ',' 0 ',' 0 ',' 5 ',' 5 ',' 0 ',' 0 ' union all
select ' name Y ',' week2 ',' xxx ',' yyy ',' .... ',' zzz ',' 5 ',' 0 ',' 0 ',' 0 ',' 4 ',' 0 ',' 0 ' union all
select ' name Z ',' week2 ',' xxx ',' yyy ',' .... ',' zzz ',' 0 ',' 4 ',' 5 ',' 4 ',' 0 ',' 0 ',' 2 '
)
select * from t unpivot (dayVal for dayName in (day1, day2, day3, day4, day5, day6, day7)) t有关使用unpivot的详细信息,请参见microsoft documentation。
输出如下所示:

发布于 2020-07-28 20:18:27
你查看过PIVOT吗?
@jarlh:表有字段。有时称为列,有时称为字段。
https://stackoverflow.com/questions/63133727
复制相似问题