--==============================================
作者:王运亮(wwwwgou)
时间:2011-06-10
博客:http://blog.csdn.net/wwwwgou
--==============================================

--1.行转列
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
 DROP TABLE #temp
GO
CREATE TABLE #temp
(
 id INT IDENTITY,
 [name] NVARCHAR(10),
 [type] NVARCHAR(10),
 [amount] INT
)
INSERT #temp
SELECT N'One', N'type1', 1 UNION ALL
SELECT N'One', N'type1', 2 UNION ALL
SELECT N'One', N'type2', 3 UNION ALL
SELECT N'Two', N'type1', 4 UNION ALL
SELECT N'Two', N'type1', 5
GO

--#1. 行转列字段值固定.
--1.case when
SELECT
 [name],
 [type1] = SUM(CASE [type] WHEN N'type1' THEN [amount] ELSE 0 END),
 [type2] = SUM(CASE [type] WHEN N'type2' THEN [amount] ELSE 0 END)
FROM #temp
GROUP BY [name]
--2.pivot
SELECT
 [name],
 [type1] = ISNULL([type1], 0),
 [type2] = ISNULL([type2], 0)
FROM (SELECT [name], [type], [amount] FROM #temp) a
PIVOT
(SUM([amount]) FOR [type] IN([type1], [type2])) b

--#2. 行转列字段值不固定,只能拼SQL了.
--1.case when
DECLARE @sql NVARCHAR(MAX)
SET @sql = N''

SELECT @sql = @sql + N', ' + CHAR(10) + QUOTENAME([type]) + N' = SUM(CASE [type] WHEN N'''+ [type] +N''' THEN [amount] ELSE 0 END)'
FROM (SELECT DISTINCT [type] FROM #temp) T

SET @sql = N'SELECT [name]' +  @sql
SET @sql = @sql + CHAR(10) + N'FROM #temp GROUP BY [name]'

EXEC(@sql)

--2.pivot
SET @sql = N''

SELECT @sql = @sql + N', ' + CHAR(10) + QUOTENAME([type]) + N' = ISNULL('+ QUOTENAME([type]) +N', 0)'
FROM (SELECT DISTINCT [type] FROM #temp) T

SET @sql = N'SELECT [name]' +  @sql
SET @sql = @sql + CHAR(10) + N'FROM (SELECT [name], [type], [amount] FROM #temp) a' + CHAR(10) +
 N'PIVOT' + CHAR(10) +
 N'(SUM([amount]) FOR [type] IN('+ STUFF((SELECT DISTINCT ','+QUOTENAME([type]) FROM #temp FOR XML PATH('')),1,1,'') +N')) b'

EXEC(@sql)

--2.列转行
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
 DROP TABLE #temp
GO
CREATE TABLE #temp
(
 id INT IDENTITY,
 [name] NVARCHAR(10),
 [type1] NVARCHAR(10),
 [type2] NVARCHAR(10),
)
INSERT #temp
SELECT N'One', 3, 3 UNION ALL
SELECT N'Two', 9, 0
GO

--1.union all
SELECT rowno=ROW_NUMBER() OVER(ORDER BY name), * FROM
(
 SELECT name, [type] = N'type1', [amount] = type1 FROM #temp
 UNION ALL
 SELECT name, [type] = N'type2', [amount] = type2 FROM #temp
) T

--2.unpivot
SELECT rowno=ROW_NUMBER() OVER(ORDER BY name), * FROM
(SELECT [name], type1, type2 FROM #temp) a
UNPIVOT
([amount] FOR [type] IN([type1],[type2])) b

SQL列转行及行转列相关推荐

  1. matlab 列转行,postgresql 行转列,列转行后加入到一个整体数据

    这里行转列的基本思想就是使用max,因为其他列下面都是NULL,所以可以Max最后就只能得到有值的这行 普通的查询: SELECT icd , case when (ROW_NUMBER() OVER ...

  2. SQL 列转行、行转列 - 使用sqlite演示

    一 列转行 CREATE TABLE test1(ID INT PRIMARY KEY NOT NULL,NAME VARCHAR(50) NOT NULL,语文 INT,数学 INT,英语 INT ...

  3. oracle sql列转行_ORACLE 列转行和行转列的SQL和函数

    本文介绍两种行.列转换方法,一种是常规的SQL,一种是ORACLE 11G提供的函数.下面使用一个小例子对这两种方法进行说明. ---------------------------------原始表 ...

  4. sql列转行,行转列,可实操

    题: 或请参考1179. 重新格式化部门表 - 力扣(LeetCode)https://leetcode-cn.com/problems/reformat-department-table/ 进行实操 ...

  5. oracle 动态sql列转行_Oracle 行转列 动态出转换的列

    10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法中,正常情况下,我们需要转出多少个列,都得在我们的sql中完完整整地写出,而不能直接在里面写个查询来 ...

  6. oracle 动态sql列转行_oracle行转列(动态行转不定列)

    ---------------------------------------------------------------行转列的存储过程 CREATE OR REPLACE PROCEDURE ...

  7. oracle游标列转行,Oracle行转列和列转行

    一.行转列 1.1.初始测试数据 表结构:TEST_TB_GRADE Sql代码: 1    create table TEST_TB_GRADE 2    ( 3      ID        NU ...

  8. mysql php 列转行_MySql行转列、列转行

    现mysql中有一张表php_user表,表结构为: 表中数据有: 现在想查询出来不同学生的语数外成绩在一行显示,那么需要用到行转列的用法, 一.行转列 1.使用case...when....then ...

  9. oracle列转行 多个字段_oracle 列转行、行转列

    行转列:PIVOT 列转行:UNPIVOT 这两个是在oracle11g上面新增的函数.下面举例说明用法. PIVOT: 学生成绩表,原数据: select class_name, student_n ...

最新文章

  1. ATS插件channel_stats源码分析解读
  2. Photo Stack效果
  3. Neo4j Java REST绑定–第2部分(批处理)
  4. mysql 5.5 查询_mysql5.5数据库优化--定位慢查询
  5. H5实例 移动端页面练习
  6. 【报告分享】2021年BrandGrow中国新锐品牌增长潜力报告.pdf(附下载链接)
  7. 面向对象的三个基本特征_杂谈:JavaScript面向对象
  8. 关于自抗扰控制的一些中文论文
  9. Excel教程视频《Excel大神上分攻略》50个工作场景,从案例到实践
  10. python实现自动上传图片_python 实现图片自动上传七牛返回地址
  11. [乐意黎原创] 最高学历与最高学位
  12. CS143 6、7. 自顶向下和自底向上的语法分析
  13. NMOS管和PMOS管做开关控制电路
  14. 深入理解Java Stream流水线
  15. python热图_Python 绘制热图
  16. 英国筒灯耐火报告的天花板结构I-joist 跟Web- Joist有什么区别?
  17. 拼多多API接口,item_get_app - 根据ID取商品详情原数据
  18. nginx文件服务器5万并发量,Nginx服务器高性能优化-轻松实现10万并发访问量
  19. arch-linux+xfce4+lightdm+uefi个人安装记录
  20. 笔记:sentinel整合feign报org.springframework.beans.factory.UnsatisfiedDependencyException问题

热门文章

  1. HT1621B驱动液晶LCD连接及程序
  2. 犹太富翁是怎样培养小富翁的?(永远的经典)
  3. 月嫂的薪资为啥这么HIGH!
  4. [体感游戏]关于体感游戏的一些思考(五) --- 导航
  5. dbunit测试dao_使用DbUnit和Anthill控制您的测试环境
  6. aspectjweaver.jar+ aopalliance.jar+mchange-commons-java.jar+cglib.jar官网下载
  7. git之如何合并部分提交
  8. webstorm2019 汉化后无法设置 webstorm最新汉化包
  9. 解决报错:did not contain a valid NDK and couldn‘t be used
  10. PHP乱码问题,UTF-8(乱码)