server多列转行 sql_SQL Server 2008列转行问题

我统计出公时表的数据,如下createtableoperator(begin_timedatetime,end_timedatetime,op_idchar(4),work_timeint)insertintooperatorselect'2013-03-0100:00:00','2013-03-0200:00:0...

我统计出公时表的数据,如下

create table operator(

begin_time datetime,

end_time datetime,

op_id char(4),

work_time int

)

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','1001',7

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','1002',8

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','1003',6

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','2001',8

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','2002',8

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','2003',7

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','2004',8

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','3001',6

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','3002',7

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','3003',8

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','3004',5

insert into operator select '2013-03-01 00:00:00','2013-03-02 00:00:00','3005',6

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','1001',7

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','1002',8

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','1003',6

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','1005',9

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','1007',6

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','2002',9

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','2003',7

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','2004',5

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','2006',3

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','3003',8

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','3005',7

insert into operator select '2013-03-02 00:00:00','2013-03-03 00:00:00','3007',10

然后我想把这个数据,转换成如下两种表的格式,请问如何处理?

第一张结果表中,手误多输入了一行开始结束时间,后面却是空的.(请大家自动屏蔽之),谢谢!

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 2008 中,可以使用 PIVOT 和 UNPIVOT 这两个关键字来实现列转行和行转列。 列转行: 假设你有一个 Employee 表,其中包含了员工的姓名、工资和工作部门: |姓名|工资|部门| |---|---|---| |张三|5000|销售| |李四|6000|人力| |王五|7000|技术| 现在你想将部门作为列,将工资作为值,将每个员工的工资转换为部门工资汇总,可以使用 PIVOT 实现: ```sql SELECT * FROM ( SELECT name, salary, department FROM Employee ) AS SourceTable PIVOT ( SUM(salary) FOR department IN ([销售], [人力], [技术]) ) AS PivotTable; ``` 执行这个 SQL 查询语句,会得到以下结果: |姓名|销售|人力|技术| |---|---|---|---| |张三|5000|null|null| |李四|null|6000|null| |王五|null|null|7000| 可以看到,每个部门的工资汇总都被转换成了列,每个员工的工资则被放置在相应的列下面。 行转列: 假设你有一个 Orders 表,其中包含了订单号、客户姓名、订单日期和订单金额: |订单号|客户姓名|订单日期|订单金额| |---|---|---|---| |1|张三|2021-01-01|200| |2|张三|2021-01-02|300| |3|李四|2021-01-03|400| |4|李四|2021-01-04|500| 现在你想将客户姓名作为列,将订单日期作为行,将订单金额作为值,可以使用 UNPIVOT 实现: ```sql SELECT * FROM ( SELECT order_no, customer_name, order_date, order_amount FROM Orders ) AS SourceTable UNPIVOT ( order_amount FOR order_date IN ([2021-01-01], [2021-01-02], [2021-01-03], [2021-01-04]) ) AS UnpivotTable; ``` 执行这个 SQL 查询语句,会得到以下结果: |订单号|客户姓名|order_date|order_amount| |---|---|---|---| |1|张三|2021-01-01|200| |2|张三|2021-01-02|300| |3|李四|2021-01-03|400| |4|李四|2021-01-04|500| 可以看到,客户姓名被转换为列,订单日期被转换为行,订单金额被放置在相应的行列位置上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值