Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
某些SQL列的透视(转置)_Sql_Sql Server_Pivot - Fatal编程技术网

某些SQL列的透视(转置)

某些SQL列的透视(转置),sql,sql-server,pivot,Sql,Sql Server,Pivot,我希望通过表中的一些列进行转置。我有如下示例: ╔════════╦═══════╦══════╦══════╦═════════╦══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╗ ║ name ║ week ║ colX ║ ColY ║ Col.... ║ ColZ ║ Day 1 ║ Day 2 ║ Day 3 ║ Day 4 ║ Day 5 ║ Day 6 ║ Day 7 ║ ╠════════╬════

我希望通过表中的一些列进行转置。我有如下示例:

╔════════╦═══════╦══════╦══════╦═════════╦══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╗
║ 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。

以下是一个数据示例:

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的详细信息,请参阅

输出如下所示: 您退房了吗


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

在SQL世界中,表有列。SQL中的字段是另一个字段,例如时间值的分钟字段。所有这些都符合ISO/ANSI SQL标准。然而,Excel用户对此可能有不同的想法。这正是我所需要的,我尝试使用pivot,但这更清楚