pivot sqlserver 条件_SqlServer PIVOT行转列

PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。

测试数据

INSERT INTO [TestRows2Columns] ([UserName],[Subject],[Source])

SELECT N'张三',N'语文',60 UNION ALL

SELECT N'李四',N'数学',70 UNION ALL

SELECT N'王五',N'英语',80 UNION ALL

SELECT N'王五',N'数学',75 UNION ALL

SELECT N'王五',N'语文',57 UNION ALL

SELECT N'李四',N'语文',80 UNION ALL

SELECT N'张三',N'英语',100

GO

select UserName,

sum(CASE Subject WHEN '数学' THEN Source ELSE 0 END)as 数学

,sum(CASE Subject WHEN '英语' THEN Source ELSE 0 END) as 英语

,sum(CASE Subject WHEN '语文' THEN Source ELSE 0 END) as 语文

from [TestRows2Columns]

GROUP BY UserName

PIVOT行转列

SELECT *

FROM( SELECT [UserName] ,

[Subject] ,

[Source]

FROM[TestRows2Columns]

) p PIVOT

( SUM([Source]) FOR [Subject] IN ( [数学],[英语],[语文] ) ) AS pvt

ORDER BY pvt.[UserName];

GO

PIVOT求参加每项的次数

SELECT '总数' AS [总次数],

[数学],[英语],[语文]

from (SELECT Subject as [科目],[id]

from TestRows2Columns)as tbl PIVOT

( COUNT([id])for tbl.[科目] IN([数学],[英语],[语文]))as tbl

SELECT '总数' AS [总次数], [数学],[英语],[语文] --(选择行转列后的结果集的列)这里可以用“*”表示选择所有列,也可以只选择某些列(也就是某些科目)

from (SELECT Subject as [科目],[id] from TestRows2Columns)as tbl PIVOT 查询所有科目和对应id号

( COUNT([id])for tbl.[科目] IN([数学],[英语],[语文]))as tbl将列科目里面的值

分别转换成列并计算每个列的数量

行转列后,原来的某个列的值变做了列名,在这里就是原来Subject列的值“数学”,"语文"...做了列名,而我们需要做的另一个工作就是计算这些列的值(这里的“计算”其实就是PIVOT里面的聚合函数(sum,COUNT等))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值