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;
    

      

  • 相关阅读:
    都不敢上CSDN了
    什么是函数(function)?
    今天3/8妇女节
    一件有意思的事情:关于std::string和std::auto_ptr
    转两篇Link相关的文章
    DevIL Downloads
    状态模式(State Pattern)
    访问者模式(Visitor Pattern)
    羊皮卷的故事第二章
    备忘录模式(Memento Pattern)
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/15745183.html
Copyright © 2011-2022 走看看