【发布时间】:2021-09-05 05:26:42
【问题描述】:
我正在使用 SQL Server 2017 根据每个 symbol、created_date 和 call_put 值计算一些列值。在这里,我只发布一个符号,即 PFE 作为示例,但我在真实桌子上有很多。看来我需要 windowing/pivoting 来计算百分比和总和。
当前查询,
select symbol, created_date ,call_put,sum(volume) as ContractCount,sum(premium) as totalamount
from options_flow of2 where symbol ='PFE' GROUP by call_put,created_date,symbol
电流输出:
symbol|created_date|call_put|ContractCount|totalamount|
------+------------+--------+-------------+-----------+
PFE | 2021-06-11|CALL | 3087| 260754|
PFE | 2021-06-11|PUT | 2445| 167671|
预期输出:
symbol|created_date|CallContractCount|PutContractCount|calltotalamount|puttotalamount|CallsContractPercentage|PUTsContractsPercentage| TotalCount
------+------------+-----------------+----------------+---------------+---------------+---------------------------+------------------------------
PFE | 2021-06-11 | 3087 | 2445 | 260754 |167671 | (3087 / (3087+2445))*100 | (2445 / (3087+2445))*100 | 3087+2445
我尝试过的:
SELECT
created_date, symbol,
(SUM(CallsContractCount) / NULLIF (SUM(CallsContractCount) + SUM(PutsContractCount), 0) * 100) CallsContractPercentage,
(SUM(PutsContractCount) / NULLIF (SUM(CallsContractCount) + SUM(PutsContractCount), 0) * 100) PUTsContractsPercentage,
SUM(CallsTotalAmount) CallsTotalAmount , SUM(PUTstotalamount) PUTstotalamount,
SUM(CallsContractCount) CallsContractCount,
(SUM(CallsContractCount) + SUM(PutsContractCount)) TotalCount,
SUM(PutsContractCount) PutsContractCount
FROM
(
select created_date, symbol,call_put ,
CASE WHEN call_put = 'CALL' THEN volume ELSE 0 END CallsContractCount,
CASE WHEN call_put = 'PUT' THEN volume ELSE 0 END PutsContractCount,
CASE WHEN call_put = 'CALL' THEN premium ELSE 0 END CallsTotalAmount,
CASE WHEN call_put = 'PUT' THEN volume ELSE 0 END PUTstotalamount
from options_flow
) t WHERE symbol = 'PFE'
GROUP BY created_date, symbol, call_put
【问题讨论】:
-
您正在按 call_put 分组,这将强制将它们放在 2 条单独的行中 - 如果您从分组中删除它,您会将它们放在一行中。
标签: sql sql-server pivot window-functions