架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2067|回复: 0

[资料] sqlserver 横表转纵表(行转列)

[复制链接]
发表于 2018-4-16 17:36:19 | 显示全部楼层 |阅读模式
题目:纵表转横表

问题

问题

解决方案:
微信图片_20180416173104.png 微信图片_20180416173014.png

sql语句:

  1. SELECT TOP 1000 [Id]
  2.       ,[Name]
  3.       ,[Department]
  4.       ,[Price]
  5.       ,[Count]
  6.       ,[Money]
  7.   FROM [Test]

  8. -- 第一步:创建一个零时表
  9. -- SELECT Department, name, SUM(Money) as sumMoney into #test2 from Test GROUP BY Department, name

  10. select * from #test2

  11. -- 第二步:行转列,纵表转横表

  12. -- 第一种方式
  13. select * from #test2 pivot (sum(sumMoney) for Department in(销售一部,销售二部,销售三部)) #test2

  14. -- 第二种方式
  15.         select name,
  16.         sum (case Department when '销售一部' then sumMoney else 0 end) as 销售一部,
  17.         sum (case Department when '销售二部' then sumMoney else 0 end) as 销售二部,
  18.         sum (case Department when '销售三部' then sumMoney else 0 end) as 销售三部
  19.         from #test2
  20.         group by name

复制代码
遗留问题:
使用pivot后 in 里面不能子查询。


横表转纵表:
横表结构 Table_B   -->    纵表结构 Table_A

方法一:union all


  1. select 姓名,'语文' as 课程,语文 as 成绩 from Table_B union all
  2. select 姓名,'数学' as 课程,数学 as 成绩 from Table_B union all
  3. select 姓名,'英语' as 课程,英语 as 成绩 from Table_B
  4. order by 姓名,课程 desc

复制代码
方法二:使用unpivot
  1. select 姓名,课程,成绩 from Table_B
  2. unpivot
  3. (成绩 for 课程 in ([语文],[数学],英语)) 临时表
复制代码












上一篇:【Hyper-V】与【VirtualBox】【VMware】冲突的解决方法
下一篇:IIS6 MVC4 路由失效 无法访问的解决方法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-1-18 06:53

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表