sql-server - 当涉及 SUM 的多个 case 语句时,如何组合以下 2 个 sql 查询
问题描述
这是第一个子查询:
SELECT SUM(CASE WHEN TRADE_TYPE='SELL' THEN (QUANTITY*PRICE) END) -
SUM(CASE WHEN TRADE_TYPE='BUY' THEN (QUANTITY*PRICE) END) AS NET_PL, TRADINGSYMBOL AS STOCK_NAME
FROM dbo.[Table1]
GROUP BY TRADINGSYMBOL, TRADE_DATE
这是第二个子查询:
SELECT SUM(CASE WHEN TRADE_TYPE='BUY' THEN QUANTITY END) -
SUM(CASE WHEN TRADE_TYPE='SELL' THEN QUANTITY END) AS NET_QUANTITY, TRADINGSYMBOL AS STOCK_NAME
FROM dbo.[Table1]
GROUP BY TRADINGSYMBOL
这是第二个子查询的查询结果:
NET_QUANTITY STOCK_NAME
---------------------- --------------------------------------------------
NULL ABCL
0 ADAT
NULL BAF
NULL BEGE
0 CRECC
NULL CIEN
NULL DFMXA
NULL DFJL
-50 HDANK
1000 MEHD
NULL PRAK
0 TNTS
作为第二个查询结果 WITH NET QUANTITY 0 的一部分存在的每个 TRADINGSYMBOL 必须与第一个查询结果组合/合并。我的意思是除了 query-1 中包含的 TRADINGSYMBOL(s) 之外,query-2 TRADING SYMBOLS 还必须针对它们的 (QUANTITY*PRICE) 进行计算,并且应该是最终输出的一部分。
请指导我。谢谢你。
解决方案
一种快速简便的方法是将它们视为两个子查询。
SELECT
PL.STOCK_NAME
,PL.NET_PL
,Q.NET_QUANTITY
FROM
(SELECT SUM(CASE WHEN TRADE_TYPE='SELL' THEN (QUANTITY*PRICE) END) -
SUM(CASE WHEN TRADE_TYPE='BUY' THEN (QUANTITY*PRICE) END) AS NET_PL, TRADINGSYMBOL AS STOCK_NAME
FROM dbo.[Table1]
GROUP BY TRADINGSYMBOL, TRADE_DATE) AS PL
FULL OUTER JOIN
(SELECT SUM(CASE WHEN TRADE_TYPE='BUY' THEN QUANTITY END) -
SUM(CASE WHEN TRADE_TYPE='SELL' THEN QUANTITY END) AS NET_QUANTITY, TRADINGSYMBOL AS STOCK_NAME
FROM dbo.[Table1]
GROUP BY TRADINGSYMBOL) AS Q ON PL.STOCK_NAME = Q.STOCK_NAME
推荐阅读
- ios - SwiftUI:列表中的分页问题
- c# - 当我单击按钮时,OpenFileDialog 冻结应用程序/GUI
- c# - 为什么逐行匹配datagridview中的列值会消耗大量内存?
- scala - 从scala中的字符串中检索值
- r - 使用双 for 循环将表传递到列表矩阵
- perl - 如何在由 plackup 执行的 Perl Dancer App 中传递命令行选项
- llvm - LLVM中`IRBuilderBase`和`BinaryOperator`的CreateNeg有什么区别?
- c++ - 为什么使用 __LINE__ 的这段代码在 MSVC 下可以在 Release 模式下编译,但不能在 Debug 模式下编译?
- javascript - Selenium 替代 Angular JS 页面中的 SendKeys()
- python - Python Web Scraping Beautiful Soup Parse Javascript Element 和 process 变量