首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pivot(transpose) by某些列SQL

Pivot(transpose) by某些列SQL
EN

Stack Overflow用户
提问于 2020-07-28 20:04:36
回答 2查看 45关注 0票数 3

我希望通过我的表中的一些列来转置。我有类似下面的例子:

代码语言:javascript
复制
╔════════╦═══════╦══════╦══════╦═════════╦══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╗
║ 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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 20:15:25

以下是您的数据的示例:

代码语言:javascript
复制
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

输出如下所示:

票数 4
EN

Stack Overflow用户

发布于 2020-07-28 20:18:27

你查看过PIVOT吗?

@jarlh:表有字段。有时称为列,有时称为字段。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63133727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档