SQL查询案例:行列转换[行转列, 使用 CASE WHEN 处理]
2011-11-01 13:18
681 查看
行列装换--使用CASE WHEN
测试表与测试数据
CREATE TABLE TestRowCol (name VARCHAR(10),
place VARCHAR(10),
valuw INT
);
INSERT INTO TestRowCol VALUES ('张三', '东', 1);
INSERT INTO TestRowCol VALUES ('张三', '南', 2);
INSERT INTO TestRowCol VALUES ('张三', '西', 3);
INSERT INTO TestRowCol VALUES ('张三', '北', 4);
INSERT INTO TestRowCol VALUES ('李四', '东', 5);
INSERT INTO TestRowCol VALUES ('李四', '南', 6);
INSERT INTO TestRowCol VALUES ('李四', '西', 7);
INSERT INTO TestRowCol VALUES ('李四', '北', 8);
要求
将标题为name place valuw
---------- ---------- -----------
修改为
Name 东 南 西 北
思路
CASE WHEN + GROUP BY处理实现
SELECTname,
SUM(CASE WHEN place = '东' THEN valuw ELSE '0' END) AS 东,
SUM(CASE WHEN place = '南' THEN valuw ELSE '0' END) AS 南,
SUM(CASE WHEN place = '西' THEN valuw ELSE '0' END) AS 西,
SUM(CASE WHEN place = '北' THEN valuw ELSE '0' END) AS 北
FROM
TestRowCol
GROUP BY
name
执行结果
name 东 南 西 北---------- ----------- ----------- ----------- -----------
李四 5 6 7 8
张三 1 2 3 4
行列装换--使用PIVOT (SQL Server 2005 及以上版本可用)
测试表与测试数据
同行列装换--使用CASE WHEN实现
SELECTname,
tmp.[东] 东,
tmp.[南] 南,
tmp.[西] 西,
tmp.[北] 北
FROM
TestRowCol
PIVOT(
SUM(valuw)
FOR place IN ([东], [南], [西], [北] )
) tmp
ORDER BY
name
相关文章推荐
- SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理]
- SQL行列转换[未使用临时表]
- T-SQL行列相互转换命令:PIVOT和UNPIVOT使用详解
- hibernate使用原生SQL查询返回结果集的处理
- 关于 “不允许从数据类型 sql_variant 到 uniqueidentifier 的隐式转换。请使用 CONVERT 函数来运行此查询“的最终解决
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 78.Oracle数据库SQL开发之 高级查询——转换中使用多个聚合函数
- (转)PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
- 使用子查询进行编号重排的处理示例.sql
- 安卓开发SQlite使用执行SQL语句一些简单的处理——2.查询数据库的数据
- PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
- SQL中多条件查询的处理,避免使用SQL拼接
- SQL查询案例:多行转换为一行
- SQL中行列转换 Pivot UnPivot 行列转化与PIVOT、UNPIVOT运算符使用
- 使用fpSpread,代替sql行列转换
- SQL行列转换,PIVOT与UNPIVOT的区别和使用方法举例
- SQL 行列转换查询
- Hibernate3.2.6 原生sql 查询使用方法,将查询结果直接转换为POJO,不必非要指定属性大写
- SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO