zoukankan      html  css  js  c++  java
  • Postgresql 先group 然后根据不同group,用同一行 不同列展示 —— CASE 的另一种用法

    With 
    --1. group
    aTable as(
    	SELECT 
    	"SourceOrderNumber","OperateType",sum("ServiceCatagoryQuota") as "ServiceCatagoryQuota", array_agg("UsedOrderItemNumber") as  "UsedOrderItemNumber"
    	FROM orders."a" 
    	group by "SourceOrderNumber","OperateType"
    ),
    --2. group后 按类型 一行展示
    aSplitTable as (
       select "SourceOrderNumber",
       sum(CASE "OperateType" WHEN 0 THEN "ServiceCatagoryQuota" ELSE 0 END ) "RechargeQuota", 
       sum(CASE "OperateType" WHEN 1 THEN "ServiceCatagoryQuota" ELSE 0 END ) "ConsumeQuota",
       sum(CASE "OperateType" WHEN 3 THEN "ServiceCatagoryQuota" ELSE 0 END ) "RechargeReturnQuota",
       sum(CASE "OperateType" WHEN 2 THEN "ServiceCatagoryQuota" ELSE 0 END ) "CancelConsumeQuota",
       sum("ServiceCatagoryQuota") as "LeftQuota"
       from aTable
       group by "SourceOrderNumber"
    )
    SELECT * from aSplitTable;
    

      

    case的其他用法

    SELECT 
    po."OrderNumber" as "订单编号",
    po."Currency" as "币种id",
    CASE WHEN sc."Currency" =1 THEN 'CNY'
         WHEN sc."Currency" =2 THEN 'USD'
         WHEN sc."Currency" =3 THEN 'EUR'
         WHEN sc."Currency" =4 THEN 'HKD'
         WHEN sc."Currency" =5 THEN 'GBP'
         WHEN sc."Currency" =6 THEN 'AUD'
         WHEN sc."Currency" =7 THEN 'CAD'
         WHEN sc."Currency" =8 THEN 'JPY'
         WHEN sc."Currency" =9 THEN 'KRW'
         WHEN sc."Currency" =10 THEN 'NZD'
         WHEN sc."Currency" =11 THEN 'RUB'
         WHEN sc."Currency" =12 THEN 'SGD'
         ELSE '其他' end
    AS "币种名称"
    from po 
    limit 10;
    

      

  • 相关阅读:
    【Linux学习七】软件安装
    【Linux学习六】用户管理
    【Linux学习五】文本处理
    【Linux学习四】正则表达式
    【Linux学习三】VI/VIM全屏文本编辑器
    【Linux学习二】文件系统
    【Linux学习一】命令查看与帮助
    【安装虚拟机四】设置快照和克隆
    【安装虚拟机三】设置Linux IP地址
    SpringBoot之定时任务详解
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/15745183.html
Copyright © 2011-2022 走看看