--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. linux内核申请内存函数

    kmap函数:    把某块高端内存映射到页表,然后返回给用户一个填好vitual字段的page结构    建立永久地址映射,不是简单的返回virtual字段的pageioremap:    驱动程序 ...

  2. 洛谷P1157 组合的输出

    洛谷1157 组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. ...

  3. PAT 1038 体验Python之美

    1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  4. Android: Dragging Popup Window 可移动浮动View

    final View cv = new View(this); setContentView(cv); TextView tv = new TextView(this); tv.setBackgrou ...

  5. Java NIO 缓冲技术详解

    缓冲区(buffer)是从即将写入通道(channel)或刚刚从通道中读出的一段数据.它是一个持有数据,并扮演NIO通道端点的对象.缓冲区为数据访问和读写过程提供正式机制. 它是NIO和老版Java ...

  6. 尝试获取TextBox_TextChanged事件订阅列表过程

    项目中有用到动态事件绑定[多种事件],由于可触发多次绑定,所以想获取订阅列表来判断是否已绑定事件,从而避免问题! 查找相关资料得知Delegate的GetInvocationList方法可以获取委托的 ...

  7. 学习并使用了两种linq to entity 的实现sql关键字in的查询方法

    //构造Lambda语句        private static Expression<Func<TElement, bool>> BuildWhereInExpressi ...

  8. js学习之原型prototype(一)

    1.javascript中的每个引用类型(原生的.和自定义的)都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. A.prototype ...

  9. ThinkPHP3.1新特性:命名范围

    概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...

  10. [转]Compact Normal Storage for Small G-Buffers

    http://aras-p.info/texts/CompactNormalStorage.html Intro Baseline: store X&Y&Z Method 1: X&a ...