Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server Pivot/Unpivot_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server Pivot/Unpivot

SQL Server Pivot/Unpivot,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在试图找到一种方法来转换我的这个表,它将所有列中的内容排序为行 EmpID Day StartTime ------------------------------------------------- 4 SUNDAY 10:00:00 AM 4 MONDAY 8:00:00 AM 4 TUESDAY 8:00:00 AM 4 W

我正在试图找到一种方法来转换我的这个表,它将所有列中的内容排序为行

EmpID       Day             StartTime
-------------------------------------------------
  4       SUNDAY           10:00:00 AM
  4       MONDAY            8:00:00 AM
  4       TUESDAY           8:00:00 AM
  4       WEDNESDAY         8:00:00 AM
  4       THURSDAY          8:00:00 AM
  4       FRIDAY            NULL
  4       SATURDAY          NULL
 800      SUNDAY           10:00:00 AM
 800      MONDAY            8:00:00 AM
 800      TUESDAY           8:00:00 AM
 800      WEDNESDAY         8:00:00 AM
 800      THURSDAY          8:00:00 AM
 800      FRIDAY            NULL
 800      SATURDAY          NULL
进入

等等


我见过Pivot和Unpivot的例子,但是Pivot/Unpivot函数会不会太复杂?

我只会使用条件聚合:

select empid,
       max(case when day = 'Sunday' then StartTime end) as Sunday_StartTime,
       max(case when day = 'Monday' then StartTime end) as Monday_StartTime,
       . . .
from t
group by empid;

如果您想使用PIVOT

范例

注意:这假设您的表是示例中显示的3列。如果有额外的列,则应使用子查询替换表,如


从表格src中选择EmpID、Day、StartTime

谢谢您的回答,但我正在寻找pivot/unpivot替代方案。出于学习目的,请更新您的帖子,明确您只寻找pivot/unpivot解决方案,这样人们就不会浪费时间编写替代解决方案。
select empid,
       max(case when day = 'Sunday' then StartTime end) as Sunday_StartTime,
       max(case when day = 'Monday' then StartTime end) as Monday_StartTime,
       . . .
from t
group by empid;
 Select *
  From  YourTable src
  Pivot ( max(StartTime) for Day in ([Sunday],[Monday],[Tuesday] )  ) pvt