server多列转行 sql_Pivot 多列转行的有关问题

Pivot 多列转行的问题

各位亲,

如果是单列转行用Pivot 好解决,但是用pivot如何达到多列转成行的效果?

ID,Item1,Number1,Number2

1,A,10,1

1,B,5,3

1,A,3,2

2,A,5,3

2,B,1,2

2,B,2,2

效果

ID,A(Number1),A(Number2),B(Number1),B(Number2)

1,13,3,5,3

2,5,3,3,4

非常感谢帮忙,在线等!

------解决方案--------------------

declare @s nvarchar(4000)

set @s=''

Select     @s=@s+','+item1+'=sum(case when [item1]='+quotename(item1,'''')+' then no1 else 0 end)'+','

+quotename(item1 )+'=sum(case when [item1]='+quotename(item1,'''')+' then no2 else 0 end)'

from t1 group by item1

print @s

exec('select id'+@s+'  from t1 gro

  • 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、付费专栏及课程。

余额充值