行列转换案例
来源:互联网 发布:oracle数据库实例查询 编辑:程序博客网 时间:2024/06/05 17:45
前言
行列转换是我们使用非常频繁的一种场景,但是论坛里的小伙伴还是经常问到,这里用今天遇到的一个问题作为例子,分享下。
案例
create table aa
(
UserID int ,
UserName nvarchar(50),
CityName nvarchar(50)
);
insert into aa (UserID,UserName,CityName) values (1,'上海','a')
insert into aa (UserID,UserName,CityName) values (1,'上海','e')
insert into aa (UserID,UserName,CityName) values (1,'上海','c')
insert into aa (UserID,UserName,CityName) values (2,'北京','b')
insert into aa (UserID,UserName,CityName) values (2,'北京','d')
查询出来结果如下:
需要获得的结果:
分析
从结果看,我们需要对结果进行行转列,和分组两个操作。
首先这个需要行转列,所以肯定可以用case when 但是直接用cityname来做case when。
有个问题是,上海的第一行a和北京的第一行b是不一样的
所以我们引入rn 序列号,来保证上海和北京的第一行都是一样的。
然后对表进行分组,和使用case when 进行常规的行转列,就可以
SELECT UserID ,
username ,
MIN(CASE rn
WHEN 1 THEN CityName
ELSE 'zz'
END) field1 ,
MAX(CASE rn
WHEN 2 THEN CityName
ELSE '1'
END) AS fild2 ,
MAX(CASE rn
WHEN 3 THEN CityName
ELSE ''
END) AS fild3
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY username ORDER BY UserID ) AS rn
FROM AA
) AS t
GROUP BY UserID ,
username
总结
常规的行转列用case when就很好实现,有时需要先做一些处理才能用。
阅读全文
0 0
- 行列转换案例
- 行列转换问题案例回答
- SQL 行列转换--经典案例
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- 如何在eclipse切换某个Java项目的jdk版本
- Mybatis各种模糊查询
- Win10开启系统自带Wifi热点步骤
- 欢迎使用CSDN-markdown编辑器
- Myeclipse中如何取消自动提示和设置自动提示
- 行列转换案例
- 【深度学习】做AI必须要知道的十种深度学习方法
- 【智能教育】新东方副总裁徐健:人工智能时代如何实现教育升级?
- 【智能农业】中国需要学习美国“智慧农业”哪些做法
- hdu 4336 Card Collector (状压dp+期望dp)
- 【深度学习】入门深度学习真的很困难吗?从这几方面下手轻松破解!
- 【智能医疗】谁是医疗AI领域的第一梯队?
- 【财富空间】李开复:BAT之后,下一个超级公司会从OMO领域中产生
- 【智能制造】智能制造与智能工厂的主要特征