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 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找 ...
随机推荐
- Spring 4 and MyBatis Java Config
TL;DR With the Java Config enhancements in Spring 4, you no longer need xml to configure MyBatis for ...
- Delphi中代替WebBrowser控件的第三方控件
这几天,接触到在delphi中内嵌网页,用delphi7自带的TWebBrowser控件,显示的内容与本机IE8显示的不一样,但是跟装IE8之前的IE6显示一个效果.现在赶脚是下面两个原因中的一个: ...
- Node.js权威指南 (4) - 模块与npm包管理工具
4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...
- 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件
发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...
- 【转】Java中如何遍历Map对象的4种方法
原文网址:http://blog.csdn.net/tjcyjd/article/details/11111401 在Java中如何遍历Map对象 How to Iterate Over a Map ...
- 数据结构(莫队算法):HH的项链
问题描述: HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长. ...
- java---金额中文大小写实时转换小程序
本例演示一个String图形用户界面的完整应用程序,包括输入数据, 显示结果,响应事件以及异常处理. 输入一个实数表示金额,每次输入时显示该金额的中文大小写形式,运行窗口见最后. 在窗口中," ...
- HDOJ 1995 汉诺塔V
Problem Description 用1,2,-,n表示n个盘子,称为1号盘,2号盘,-.号数大盘子就大.经典的汉诺塔问 题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔 ...
- poj 2505 A multiplication game(博弈)
A multiplication game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5622 Accepted: ...
- 合并两个rs结果输出
<%Const SqlDatabaseName = "DNN625" ' 数据库名字' Const SqlPassword = "123456& ...