sql - 使用各自的记录将 ROW 转换为列
问题描述
使用各自的记录将 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
推荐阅读
- android - Google Playstore 中的 PWA 应用未在设备主屏幕上显示图标
- android - Android Kotlin 回收视图 reloadData
- python-unittest - 使用鼻子python对圆进行单元测试
- exception - 当 30,000 / 1 分钟的 http 请求在 jmeter 上持续 5 分钟时发生 BackingStoreException
- ios - 发布失败 - 我们无法创建身份验证会话
- c++ - 如何在 C++ 中创建一个数字列表,以便它可以选择一个随机数?
- python - 在第一个数据帧中的值是另一个数据帧中的值的子字符串的条件下合并两个数据帧
- c# - InstagramApiSharp 可以将数据发布到 Instagram 吗?
- .net-core - Blazor .Net 服务器端加载 LocalStorage 数据的位置
- c - sizeof(structure) 在 vs2013 的监视窗口中显示错误的大小