• 最近整理的一些行列转换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


        

  • 相关阅读:
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    查看windows和linux下端口是否被占用
    linux系统的默认用户
    修改mysql、oracle、sqlserver默认端口
    linux(centos)下密码有效期和密码复杂度设置
    linux下设置账户锁定阈值:登录失败n次,多长时间后解锁重新登录
    linux账户的锁定和解锁、禁用账号
    执行./install.sh时报错-bash: ./install.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
    突然虚拟机无法联网解决办法,且报错Failed to start LSB: Bring up/down
    kubernetes集群环境搭建(7)
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/6122895.html
Copyright © 2020-2023  润新知