--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. object c小代码——日期篇

    1.判断两个日期是否是同一天,不要求小时,分钟要一样 用法 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: ...

  2. Android项目开发全程(一)--创建工程

    每个程序员都知道,项目工程的整体架构对开发有着决定性的影响,在后续的开发工作中,能不能有效的减少代码的重复量和有效的人员分工取决于前期工程整体的架构.刚参加工作还不到一个月就意识到之前做的项目在架构方 ...

  3. makefile 中 $@ $^ %< 使用

    这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...

  4. malloc free 和new delete区别

    从网上看的学习之 1. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,与"+“.”-“.”*“.”/“有一样的地位. 2. new/delete是 ...

  5. poj 2892 Tunnel Warfare(线段树)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7499   Accepted: 3096 D ...

  6. aix 扩展文件系统

    今天发现公司的oracle测试 数据库不能启动,检查警告日志日志,提示归档空间不足,不能归档,于是扩展文件系统: 1.检查rootvg卷组的剩余空间[p2704u]:[/dsg/oracle11]$ ...

  7. console.read()读入的内容

    今天写的特别简单的代码,大体是一个模式选择,从控制台读入一个数,然后做出相应的选择. 代码如下: using System; using System.Collections.Generic; usi ...

  8. Android核心基础(四)

    1.联系人表结构 添加一条联系人信息 package com.itheima.insertcontact; import android.app.Activity; import android.co ...

  9. 8-12-COMPETITION

    链接:最短路 A.HDU 2544    最短路 算是最基础的题目了吧.............我采用的是Dijkstra算法....... 代码: #include <iostream> ...

  10. ServletContext获取项目真实路径

    import javax.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; /** ...