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等))

最新文章

  1. Java NIO5:选择器1---理论篇
  2. C#进阶系列——DDD领域驱动设计初探(六):领域服务
  3. [Architecture Design] 3-Layer基础架构
  4. 记忆化搜索 codevs 2241 排序二叉树
  5. ubuntu14.04安装chrome
  6. MyEclipse6.6 汉化过程
  7. 关于B/S系统在移动端应用的一些注意的地方(不断更新)
  8. Validate Binary Search Tree——LeetCode
  9. 在C#中使用属性控件添加属性窗口
  10. Java学习之String对象为什么是不可变的
  11. C#变量、常量、枚举、预处理器指令知多少
  12. 【技巧】datagrid锁定列后重新加载时出现错位问题的解决
  13. 全面总结: Golang 调用 C/C++,例子式教程
  14. C#线程安全使用(四)
  15. nginx+apache动静分离/负载均衡
  16. 自己动手写CPU——寄存器堆、数据存储器(基于FPGA与Verilog)
  17. Android5.0通知变化浅析
  18. jp@gc - Stepping Thread Group配置解释描述
  19. The Django Book第六章(Admin)随笔
  20. protected: C++ access control works on per-class basis, not on per-object basis

热门文章

  1. Python里的*args and **kwargs
  2. postgres centos 创建数据库 创建用户
  3. Python网络爬虫_Scrapy框架_1.新建项目
  4. javabean的内省(Introspector)
  5. Oracle 11gR2中HR用户安装说明
  6. workerman连接失败方法
  7. ubuntu上编译和使用easy_profiler对C++程序进行性能分析
  8. ZooKeeper(三):请求处理链路的创建过程解析
  9. (转)Polynomial interpolation 多项式插值
  10. Web前端基础(18):jQuery基础(五)