我有一张包含以下场地的桌子。
Field1 Field2 Field3 Filed4
Date Trantype AssetType Amount
01/01/18 Pur EQU 100
01/01/18 Sal EQU 50
02/01/18 Pur EQU 100
02/01/18 Sal EQU 50
需要输出
Date Total Purchase Total Sale Net Pur Amount
01/01/18 100 50 50
我希望按日期汇总并扣除每个日期的销售和销售。对于PUR和SALF,SAL可以有多种类型的PURF,PUR等trantype。所以我用case case语来关闭。
SELECT
sum(CASE
WHEN tran_type in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE 0
END)/10000000 AS Purchase
, sum(CASE
WHEN tran_type not in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE 0
END)/10000000 AS Sale
, sum(CASE
WHEN tran_type in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE -1*nett_val
END)/10000000 AS Net_Purchase
,sum(CASE
WHEN tran_type not in ('DPURF') THEN nett_val
ELSE -1*nett_val
END)/10000000 AS Volume
FROM Deal where rectype = 'L' and value_date >= '01 Jul 2017' and value_date <= '31 Jul 2017' and asset_type in ('EQU','ETF','PRF','CCD','AT1')
答案 0 :(得分:0)
我会评论但似乎我的名声不够高。您的示例与名称不对应的示例数据不对应。
从SQL看起来你有一个表处理列rectype,value_date,asset_type,tran_type和nett_value。在示例表中,您提供了不同的字段名称以及更少的字段。
你提到你想要按日期分组的结果,我猜“value_date”但输出只有1行,而你的样本表有2个不同的日期?
SQL还会产生4个结果列但没有日期。
根据您提供的信息,我可以建议将value_date添加到选择部分,并在查询末尾添加“GROUP BY value_date”。
我不确定为什么你有“使用NOT IN子句的销售结果列 - 因为 - 从样本数据我认为它将与('Sal')
所以我的查询可能不是你需要的,但确实使用了正确的语法:
SELECT
value_date
, sum(CASE
WHEN tran_type in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE 0 END)/10000000 AS Purchase
, sum(CASE
WHEN tran_type not in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE 0 END)/10000000 AS Sale
, sum(CASE
WHEN tran_type in ('PUR','PURF','ISPUR','BONPUR','CONPUR','PMALL','INJVSP','CUSTTO','DPURF','ISDPUR','MFALL') THEN nett_val
ELSE -1*nett_val END)/10000000 AS Net_Purchase
,sum(CASE
WHEN tran_type not in ('DPURF') THEN nett_val
ELSE -1*nett_val END)/10000000 AS Volume
FROM Deal
WHERE rectype = 'L' and value_date >= '2017-01-01' and value_date <= '2017-12-31' and asset_type in ('EQU','ETF','PRF','CCD','AT1')
GROUP BY value_date
我将value_date的where过滤器更改为包括2017年全部,但该过滤器需要更改。顺便提供YYYY-MM-DD格式的固定日期更安全。