• 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

  • 相关阅读:
    android用户界面之WebView教程实例汇总
    android用户界面之TabHost教程实例汇总
    手把手教你写android项目@第一期项目——身份证查询创新(项目总结)
    android用户界面之GridView教程实例汇总
    android学习从模仿开始 —— 模仿UI 导航帖
    Android 实现书籍翻页效果
    android用户界面之Widget教程实例汇总
    如何安装webdriver chrome浏览器支持
    Seleniumwebdriver系列教程(15)————使用已存在的profile启动firefox
    ruby设计模式之【观察者】模式1————简单的观察者模式
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/6038997.html
Copyright © 2020-2023  润新知