oracle-行转列
《一》
合并两个结果集,并且两个结果集的数据 根据条目自动归为一行
结果集1 如下:
SQL> select t1.fplx,t1.djje from yw_zjfpjl t1 ;
FPLX DJJE
-------- -----------------
一等奖 10
一等奖 20
一等奖 30
一等奖 40
一等奖 50
一等奖 60
二等奖 10
二等奖 30
二等奖 40
二等奖 50
二等奖 10
二等奖 10
四等奖 10
四等奖 10
四等奖 10
四等奖 10
四等奖 10
四等奖 10
三等奖 10
三等奖 10
三等奖 10
三等奖 10
三等奖 10
三等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
结果集2 如下:
SQL> select t2.fplx,t2.djje from yw_fjcwjl t2;
FPLX DJJE
-------- -----------------
一等奖 20
一等奖 30
一等奖 40
一等奖 50
二等奖 10
二等奖 30
二等奖 40
二等奖 50
二等奖 10
四等奖 10
四等奖 10
四等奖 10
四等奖 10
四等奖 10
三等奖 10
三等奖 10
三等奖 10
三等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
五等奖 10
合并后结果集如下:
SQL> select fplx, sum(jecg), sum(jehcg), sum(jecw), sum(jehcw)
from (select fplx, count(zjje) jecg, sum(zjje) jehcg, 0 jecw, 0 jehcw
from yw_zjfpjl
group by fplx
union all
select fplx, 0 jecw, 0 jehcw, count(zjje) jecw, sum(zjje) jehcw
from yw_fjcwjl
group by fplx)
group by fplx
order by fplx asc;
FPLX SUM(JECG) SUM(JEHCG) SUM(JECW) SUM(JEHCW)
----------- ----------- ----------- ---------- ------------
二等奖 6 150 6 150
三等奖 6 60 6 60
四等奖 6 60 6 60
五等奖 6 60 6 60
一等奖 6 210 6 210
《二》
原结果:
SELECT 1 NUM,
'奖项数量(成功)',
SUM(CASE WHEN ZJJX= '一等奖' THEN COUNT(ZJJE) ELSE 0 END),
SUM(CASE WHEN ZJJX= '二等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '三等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '四等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '五等奖' THEN COUNT(ZJJE) ELSE 0 END)
FROM YW_ZJFPJL T --WHERE to_char(zjsj)='20111129'
GROUP BY ZJJX
UNION ALL
SELECT 2 NUM,
'奖项数量(失败)',
SUM(CASE WHEN ZJJX= '一等奖' THEN COUNT(ZJJE) ELSE 0 END),
SUM(CASE WHEN ZJJX= '二等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '三等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '四等奖' THEN COUNT(ZJJE) ELSE 0 END) ,
SUM(CASE WHEN ZJJX= '五等奖' THEN COUNT(ZJJE) ELSE 0 END)
FROM YW_FJCWJL T --WHERE to_char(zjsj)='20111129'
GROUP BY ZJJX;
1 奖项数量(成功) 1 0 16 28 52
2 奖项数量(失败) 0 0 5 23 33
修改之后 两行合并为一行
SELECT * FROM
(SELECT
'奖项数量(成功)',
SUM(CASE WHEN ZJJX= '一等奖' THEN COUNT(ZJJE) ELSE 0 END) 一等奖成功,
SUM(CASE WHEN ZJJX= '二等奖' THEN COUNT(ZJJE) ELSE 0 END) 二等奖成功,
SUM(CASE WHEN ZJJX= '三等奖' THEN COUNT(ZJJE) ELSE 0 END) 三等奖成功,
SUM(CASE WHEN ZJJX= '四等奖' THEN COUNT(ZJJE) ELSE 0 END) 四等奖成功,
SUM(CASE WHEN ZJJX= '五等奖' THEN COUNT(ZJJE) ELSE 0 END) 五等奖成功
FROM YW_ZJFPJL --WHERE to_char(zjsj)='20111129'
GROUP BY ZJJX ),
(SELECT
'奖项数量(失败)',
SUM(CASE WHEN ZJJX= '一等奖' THEN COUNT(ZJJE) ELSE 0 END) 一等奖失败,
SUM(CASE WHEN ZJJX= '二等奖' THEN COUNT(ZJJE) ELSE 0 END) 二等奖失败,
SUM(CASE WHEN ZJJX= '三等奖' THEN COUNT(ZJJE) ELSE 0 END) 三等奖失败,
SUM(CASE WHEN ZJJX= '四等奖' THEN COUNT(ZJJE) ELSE 0 END) 四等奖失败,
SUM(CASE WHEN ZJJX= '五等奖' THEN COUNT(ZJJE) ELSE 0 END) 五等奖失败
FROM YW_FJCWJL T --WHERE to_char(zjsj)='20111129'
GROUP BY ZJJX );
--1 奖项数量(成功) 1 0 16 28 52 奖项数量(失败) 0 0 5 23 33
《三 经典版的case when》
SELECT * FROM
(SELECT 1 NUM,
'奖项金额',
SUM(CASE WHEN DJMC= '一等奖' AND CGBZ=0 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '二等奖' AND CGBZ=0 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '三等奖' AND CGBZ=0 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '四等奖' AND CGBZ=0 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '五等奖' AND CGBZ=0 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '一等奖' AND CGBZ=1 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '二等奖' AND CGBZ=1 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '三等奖' AND CGBZ=1 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '四等奖' AND CGBZ=1 THEN DJJE ELSE 0 END) ,
SUM(CASE WHEN DJMC= '五等奖' AND CGBZ=1 THEN DJJE ELSE 0 END)
FROM XXDZMX T WHERE DZYF=20111129 AND ZFLX=0
UNION ALL
SELECT 2 NUM,
'奖项数量',
SUM(CASE WHEN DJMC= '一等奖' AND CGBZ=0 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '二等奖' AND CGBZ=0 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '三等奖' AND CGBZ=0 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '四等奖' AND CGBZ=0 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '五等奖' AND CGBZ=0 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '一等奖' AND CGBZ=1 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '二等奖' AND CGBZ=1 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '三等奖' AND CGBZ=1 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '四等奖' AND CGBZ=1 THEN 1 ELSE 0 END),
SUM(CASE WHEN DJMC= '五等奖' AND CGBZ=1 THEN 1 ELSE 0 END)
FROM XXDZMX T WHERE DZYF=20111129 AND ZFLX=0
) ORDER BY NUM
1 奖项金额 0 50 10 0 2 200 0 10 5 2
2 奖项数量 0 1 1 0 1 1 0 1 1 1
oracle-行转列的更多相关文章
- oracle 行转列 分析函数
oracle 行转列 首先看一下源数据: 方法一:WM_CONCAT group by 这个方法没有问题. SELECT CODE_TS, WMSYS.WM_CONCAT(S_NUM + || ':' ...
- Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...
- Oracle行转列、列转行的Sql语句总结
多行转字符串 这个比较简单,用||或concat函数可以实现 SQL Code 12 select concat(id,username) str from app_userselect i ...
- Oracle行转列、列转行的Sql语句总结(转)
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str f ...
- oracle 行转列、列转行
最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle 列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...
- Oracle行转列操作
有时候我们在展示表中数据的时候,需要将行转为列来显示,如以下形式: 原表结构展示如下:---------------------------产品名称 销售额 季度------------ ...
- oracle行转列(连接字符串函数)
方法一:wmsys.wm_concat(column) 介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型.括号里面的参数是列,而且可以是多个列的集 ...
- Oracle行转列的函数
--行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...
- oracle 行转列 列转行
行转列 这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from du ...
- oracle行转列、列转行、连续日期数字实现方式及mybatis下实现方式
转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9977591.html 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找 ...
随机推荐
- 最完整的合并相交集合的Java代码(查并集)
这个是自己写的算法,如果有大牛,麻烦帮我并行化.初学者则可以学到不少东西. 产生测试用例 import java.io.*; import java.util.Random; public class ...
- Android 正则表达式匹配汉字中文
关于中文的正则表达式, 应该是^[\\u4E00-\\u9FFF]+$, 和论坛里常被人提起的^[\\u4E00-\\u9FA5]+$很接近需要注意的是论坛里说的^[\\u4E00-\\u9FA5]+ ...
- HDU 5924 Mr. Frog’s Problem 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Mr. Frog's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- Import larger wordpress xml file
The maximum size is controlled by two PHP settings: upload_max_filesize, and post_max_size. These ar ...
- Android View 事件分发机制详解
想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题.要想搞明白原理就必须了解View的分发机制.在此之前我们先来了解一下以下三个非常重要的方法: di ...
- ngnix 配置
#运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 error_log /var/log ...
- QUEUE——队列(procedure)
#include <stdio.h> #include <stdlib.h> #include "queue.h" int main() { int i; ...
- java的任务监听器监听任务
Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务. 使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行.一般用的较少 监听 ...
- 解决IE6,IE7不能隐藏绝对定位溢出的内容
令人蛋疼的IE,IE6/IE7下父元素有相对/绝对定位时,子元素在IE6和IE7下overflow:hidden;失效. 情况一:(在parent上增加position:relative) <s ...
- 今天就注册上海ORACLE2用户组014在峰会酒吧!
COLLABORATE 14 – SHOUG Forum 上海ORACLE用户组2014年高峰论坛报名本次活动由ORACLE ACS高级服务部门与 SHOUG 上海ORACLE用户组合办. 大会议程包 ...