使用各自的记录将 ROW 转换为列

Convert ROW into column with their respective records

将 ROW 转换为具有各自记录的列

我需要 4 列

TYPE   |    COUNT    |    PERIOD     |   VARIANCE
TRADE      50               JAN            0%
TRADE      100              FEB            100%

我正在使用这个查询并且只得到三列

with b1 as
(
SELECT 

      COUNT(DISTINCT T.SALE)AS TRADE,
      TO_CHAR(T.DATE,'YYYY-MON') As Period
        FROm  TRADE T 
          JOIN ORDER O ON T.Account = O.Account
        WHERE
           T.DATE between date '2020-01-01' and date '2020-01-31'  --Last 
                group by TO_CHAR(T.DATE,'YYYY-MON')

UNION ALL

SELECT 

      COUNT(DISTINCT T.SALE) AS TRADE,
      TO_CHAR(T.DATE,'YYYY-MON') As Period
        FROm  TRADE T 
          JOIN ORDER O ON T.Account = O.Account
        WHERE
           T.DATE between date '2020-02-01' and date '2020-02-28'  --Last 
         group by TO_CHAR(T.DATE,'YYYY-MON'))

select  TRADE, Period,
       100*(TRADE-lag(TRADE,1,TRADE) over (order by period))
       /lag(TRADE,1,TRADE) over (order by period)
       as "variance(%)"
  from b1
 order by period

看起来你真的很接近。这是您要找的吗?

with b1 as
(
SELECT 
 "TRADE" as Type,
      COUNT(DISTINCT T.SALE)AS Count,
      TO_CHAR(T.DATE,'YYYY-MON') As Period
        FROm  TRADE T 
          JOIN ORDER O ON T.Account = O.Account
        WHERE
           T.DATE between date '2020-01-01' and date '2020-01-31'  --Last 
                group by TO_CHAR(T.DATE,'YYYY-MON')

UNION ALL

SELECT 
"TRADE" as TYPE,
      COUNT(DISTINCT T.SALE) AS COUNT,
      TO_CHAR(T.DATE,'YYYY-MON') As Period
        FROm  TRADE T 
          JOIN ORDER O ON T.Account = O.Account
        WHERE
           T.DATE between date '2020-02-01' and date '2020-02-28'  --Last 
         group by TO_CHAR(T.DATE,'YYYY-MON'))

select  TYPE, COUNT, Period,
       100*(TRADE-lag(TRADE,1,TRADE) over (order by period))
       /lag(TRADE,1,TRADE) over (order by period)
       as "variance(%)"
  from b1
 order by period