使用各自的记录将 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
将 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