最近整理的一些行列转换sql(有自己的,有别人的),留作记录
--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
--初始数据如下:
SELECT ZJJX, SUM(CGSL), SUM(CGJEH), SUM(SBSL), SUM(SBJEH)
FROM (
SELECT ZJJX, COUNT(ZJJE) CGSL, SUM(ZJJE) CGJEH, 0 SBSL, 0 SBJEH FROM YW_ZJFPJL where substr(to_char(zjsj, 'yyyy-mm-dd hh24:mi:ss'), 0, 7) = '2016-10' GROUP BY ZJJX
UNION ALL
SELECT ZJJX, 0 CGSL, 0 CGJEH, COUNT(ZJJE) SBSL, SUM(ZJJE) SBJEH FROM YW_FJCWJL where substr(to_char(zjsj, 'yyyy-mm-dd hh24:mi:ss'), 0, 7) = '2016-10' GROUP BY ZJJX)
GROUP BY ZJJX;
/*
一等奖 1 200 0 0
三等奖 16 160 5 50
四等奖 28 140 23 115
五等奖 52 104 33 66
*/
--以下sql完成的哦
--奖项金额完成的
SELECT *
FROM (SELECT '奖项金额(成功)',
SUM(CASE WHEN ZJJX = '一等奖' THEN SUM(ZJJE) ELSE 0 END) 一等奖成功金额,
SUM(CASE WHEN ZJJX = '二等奖' THEN SUM(ZJJE) ELSE 0 END) 二等奖成功金额,
SUM(CASE WHEN ZJJX = '三等奖' THEN SUM(ZJJE) ELSE 0 END) 三等奖成功金额,
SUM(CASE WHEN ZJJX = '四等奖' THEN SUM(ZJJE) ELSE 0 END) 四等奖成功金额,
SUM(CASE WHEN ZJJX = '五等奖' THEN SUM(ZJJE) ELSE 0 END) 五等奖成功金额
FROM YW_ZJFPJL T WHERE to_char(zjsj,'yyyymmdd')='20161017' GROUP BY ZJJX),
(SELECT '奖项金额(失败)',
SUM(CASE WHEN ZJJX = '一等奖' THEN SUM(ZJJE) ELSE 0 END) 一等奖失败金额,
SUM(CASE WHEN ZJJX = '二等奖' THEN SUM(ZJJE) ELSE 0 END) 二等奖失败金额,
SUM(CASE WHEN ZJJX = '三等奖' THEN SUM(ZJJE) ELSE 0 END) 三等奖失败金额,
SUM(CASE WHEN ZJJX = '四等奖' THEN SUM(ZJJE) ELSE 0 END) 四等奖失败金额,
SUM(CASE WHEN ZJJX = '五等奖' THEN SUM(ZJJE) ELSE 0 END) 五等奖失败金额
FROM YW_FJCWJL T WHERE to_char(zjsj,'yyyymmdd')='20161017'
GROUP BY ZJJX);
--输出结果: 1 奖项金额(成功) 200 0 160 140 104 奖项金额(失败) 0 0 50 115 66
--奖项数量完成的
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 T WHERE to_char(zjsj,'yyyymmdd')='20161017' 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,'yyyymmdd')='20161017'
GROUP BY ZJJX);
--输出结果: 奖项数量(成功) 1 0 16 28 52 奖项数量(失败) 0 0 5 23 33
最近整理的一些行列转换sql(有自己的,有别人的),留作记录的更多相关文章
- 数据库行列转换sql
经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...
- SqlServer2000下实现行列转换
SqlServer2000下实现行列转换 2011-04-06 22:07:07| 分类: SQL Server | 标签:sqlserver 2000 行列转换 sql |举报|字号 订 ...
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子
使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...
- SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
原文出处:http://www.cnblogs.com/wy123/p/5933734.html 先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全 ...
- SQL SERVER 合并重复行,行列转换
引用自:http://www.cnblogs.com/love-summer/archive/2012/03/27/2419778.html sql server2000 里面如何实现oracle10 ...
- SQL中PIVOT 行列转换
来源:http://www.studyofnet.com/news/295.html PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列 ...
- SQL pivot 基本用法 行列转换 数据透视
SQL通过pivot进行行列转换 数据透视 可直接在sql server 运行 传统操作 和 pivot create table XKCl (name nchar(10) not null, 学科 ...
- sql行列转换
首先我们建立一张表,名为scoreInfo,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示.
随机推荐
- 个性CMD设置方法(转载)
原文地址http://wenku.baidu.com/link?url=DB8X-eHwE_VGtggBmKsBimdzXeGI_6Ga90W9PmX2Px2eUqdXOnq7FhEIzsqBfTqT ...
- 【解决】exited with a non-zero exit code 1
安装好集群后运行hadoop-mapreduce-examples.jar 报错,比对cdh配置后,发现少了yarn.application.classpath,conf目录一定要配置,否则也会出 ...
- glusterfs repo
Installing Gluster For RPM based distributions, if you will be using InfiniBand, add the glusterfs R ...
- map的基本操作函数及含义
map的基本操作函数: C++ Maps是一种关联式容器,包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear() ...
- 一步一步学android控件(之十六)—— CheckBox
根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式.今天主要学习如何自定义CheckBox样式.在CheckBox状态改变时有时需要做一些 ...
- C# 连接SQL数据库 常用连接字符串
一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myP ...
- C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...
- Cocos2d-x 3.0- 在Visual Studio 2012中执行測试项目
Cocos2d-x - 怎样在Win32执行cpp-tests 2014年4月30日 星期三 小雨 微凉 稍显疲惫 注:本篇文章来自Cocos2d-x官网,小巫仅仅是粗略翻译眼下最新版本号的,教大家怎 ...
- iOS开发中WebP格式的64位支持处理
几个月前我们项目中添加了对webp格式的处理.期间遇到了一些问题,这是当中的一个小的记录. 官方下载地址:https://code.google.com/p/webp/downloads/list 对 ...
- Android SDK Manager无法更新问题解决
有时候在网络不好的情况下,android sdk manager更新可能一直报错.原因跟国内对于google相关服务的访问受限有关系,需要设置代理访问. 最近也遇到了这个问题.解决方法如下. 启动An ...