行转列与列转行
来源:互联网 发布:数据库考试试题及答案 编辑:程序博客网 时间:2024/05/21 12:49
有群友询问sql写法,要求实现功能如下
示例数据
DROP TABLE t/create table t (a varchar2(30),b varchar2(30),c varchar2(30),d varchar2(30) );insert into t values('门店1','品牌1','2','8');insert into t values('门店1','品牌2','3','6');insert into t values('门店1','品牌3','2','10');insert into t values('门店2','品牌1','1','4');insert into t values('门店2','品牌2','4','8');insert into t values('门店2','品牌3','4','20');insert into t values('门店3','品牌1','3','12');insert into t values('门店3','品牌2','2','4');insert into t values('门店3','品牌3','1','5');/
sql实现方法如下
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as test@192.168.1.118:1521/orclSQL> SQL> WITH T1 AS 2 (SELECT GROUPING(T.B) AS GP_B, 3 T.B AS 品牌, 4 SUM(CASE T.A 5 WHEN '门店1' THEN 6 T.C 7 END) AS 销量_门店1, 8 SUM(CASE T.A 9 WHEN '门店2' THEN 10 T.C 11 END) AS 销量_门店2, 12 SUM(CASE T.A 13 WHEN '门店3' THEN 14 T.C 15 END) AS 销量_门店3, 16 SUM(T.C) AS 销量_合计, 17 SUM(CASE T.A 18 WHEN '门店1' THEN 19 T.D 20 END) AS 收入_门店1, 21 SUM(CASE T.A 22 WHEN '门店2' THEN 23 T.D 24 END) AS 收入_门店2, 25 SUM(CASE T.A 26 WHEN '门店3' THEN 27 T.D 28 END) AS 收入_门店3, 29 SUM(T.D) AS 收入_合计 30 FROM T 31 GROUP BY ROLLUP(T.B) 32 ORDER BY 1 DESC,2) 33 SELECT CASE 34 WHEN GP_B = 1 THEN 35 '销量合计' 36 ELSE 37 品牌 38 END AS 品牌, 39 销量_门店1 AS 门店1, 40 销量_门店2 AS 门店2, 41 销量_门店3 AS 门店3, 42 销量_合计 AS 合计 43 FROM T1 44 UNION ALL 45 SELECT CASE 46 WHEN GP_B = 1 THEN 47 '收入合计' 48 ELSE 49 品牌 50 END AS 品牌, 51 收入_门店1 AS 门店1, 52 收入_门店2 AS 门店2, 53 收入_门店3, 54 收入_合计 AS 合计 55 FROM T1 56 UNION ALL 57 SELECT CASE 58 WHEN GP_B = 1 THEN 59 '收入合计' 60 ELSE 61 品牌 62 END AS 品牌, 63 round(销量_门店1 * 收入_门店1 / 销量_合计,2) AS 门店1, 64 round(销量_门店2 * 收入_门店1 / 销量_合计,2) AS 门店2, 65 round(销量_门店3 * 收入_门店1 / 销量_合计,2) AS 门店3, 66 收入_合计 AS 合计 67 FROM T1;品牌 门店1 门店2 门店3 合计---------- ---------- ---------- ---------- ----------销量合计 7 9 6 22品牌1 2 1 3 6品牌2 3 4 2 9品牌3 2 4 1 7收入合计 24 32 21 77品牌1 8 4 12 24品牌2 6 8 4 18品牌3 10 20 5 35收入合计 7.64 9.82 6.55 77品牌1 2.67 1.33 4 24品牌2 2 2.67 1.33 18品牌3 2.86 5.71 1.43 3512 rows selected
- 行转列与列转行
- oracle 行转列 与列转行
- pivot(行转列)与unpivot(列转行)
- sql应用行转列与列转行
- 列转行、行转列
- 行转列 -列转行
- SQL行转列 列转行
- SQL行转列,列转行
- 行转列 列转行
- 行转列.列转行 oracle
- oracle 行转列,列转行
- 【ORACLE】行转列,列转行
- SQL 列转行/行转列
- oracle 行转列 列转行
- oracle 行转列,列转行
- 行转列 VS 列转行
- 列转行--行转列
- oracle 行转列 列转行
- Unity3D内存释放
- java.lang.SecurityException: Permission Denial: opening provider
- ASCII码排序
- 翻转句子中单词的顺序
- cocos2d-x android 编译 iconv库
- 行转列与列转行
- 数据结构——冒泡排序
- udev 实战
- 数据结构——归并排序
- 一致性代码段和非一致性代码段
- Mysql疑问与关注点
- 水仙花数
- 开发日志:设置<DIV>内容不自动换行,及inline后width和height等失效的问题
- Android 常用代码---数据库