--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(有自己的,有别人的),留作记录的更多相关文章

  1. 数据库行列转换sql

    经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...

  2. SqlServer2000下实现行列转换

    SqlServer2000下实现行列转换 2011-04-06 22:07:07|  分类: SQL Server |  标签:sqlserver  2000  行列转换  sql  |举报|字号 订 ...

  3. SQL Server中行列转换 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  4. SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  5. SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

    原文出处:http://www.cnblogs.com/wy123/p/5933734.html 先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全 ...

  6. SQL SERVER 合并重复行,行列转换

    引用自:http://www.cnblogs.com/love-summer/archive/2012/03/27/2419778.html sql server2000 里面如何实现oracle10 ...

  7. SQL中PIVOT 行列转换

    来源:http://www.studyofnet.com/news/295.html PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列 ...

  8. SQL pivot 基本用法 行列转换 数据透视

    SQL通过pivot进行行列转换 数据透视 可直接在sql server 运行 传统操作 和 pivot create table XKCl (name nchar(10) not null, 学科 ...

  9. sql行列转换

    首先我们建立一张表,名为scoreInfo,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示.

随机推荐

  1. LA4329 Ping pong 树状数组

    题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术.每个人都有一个能力值a[i].每场比赛需要三个人:两名选手,一名裁判.他们有个奇怪的约定,裁判必须住在两名选手之间,而裁判的能力值也必须在两 ...

  2. HW5.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  3. codeforces 432D Prefixes and Suffixes

    由于包含了前缀与后缀,很容易想到用KMP去算前缀与后缀的公共缀.另外要计算某个后缀在整个串中出现的次数,由于后缀自动机是比较容易求的,然后就直接上后缀自动机了.先分别用KMP算法与后缀自动机跑一遍,然 ...

  4. hdu3394--Railway(点的双连通分量)

    一个公园中有 n 个景点,景点之间通过无向的道路来连接,如果至少两个环公用一条路,路上的游客就会发生冲突:如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 每一个连通 ...

  5. JS 单元测试

    JS单元测试,我工作时主要以mocha + chai 下面时具体的文档: mocha: https://mochajs.org/#asynchronous-code Chai: http://chai ...

  6. 关于python文件转为exe文件

    一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序. py2e ...

  7. csdn 刷分小工具(刷了1000多被封了,慎用)

    先上图,周第一, 月第六代码未整理,比较乱,仅仅供参考(cookie已经废了,号被封了,哈哈) using System; using System.Collections.Generic; usin ...

  8. SQLite简介

    1.SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有9个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQLite 3. SQLite官方网站: ht ...

  9. PHP基本语法(一)

    整形:就是对用整数  正整数与负整数整形的表示:int integer NOTICE:写整形的时候不要在外面再加引号了 浮点:就是小数 3.1415926Float 浮点 布尔值:男和女 真和假 阴和 ...

  10. linq to sql 博客集锦

    Linq to sql  比较全面的学习博客 http://www.cnblogs.com/aehyok/tag/Linq%20To%20Sql/ 使用LINQ TO SQL基于Respository ...