在我的MS SQL Server数据库中,我根据一列中的各种不同代码提取交易数据.
是否更有效率:
为WHERE子句中的每个代码反复连接相同的表
在整个表格上做多个案例陈述(如下所示)
在整个表上做多个case语句,但是用一个WHERE SubsidCde IN ('AA','BA','BB', etc)子句限制它
我们每秒运行这么多查询,即使我已经尝试了所有3种方法,但我没有得到明确的结果.
SELECT
SUM(CASE WHEN Subsid_Cde = 'AA' THEN Trans_Amt END),0) [AA],
SUM(CASE WHEN Subsid_Cde = 'BA' THEN Trans_Amt END),0) [BA],
SUM(CASE WHEN Subsid_Cde = 'BB' THEN Trans_Amt END),0) [BB]
FROM
Transactions
-- There are 8 more rows like this, using a different code for each line
Run Code Online (Sandbox Code Playgroud)
如果您要对 Subsid_Cde 字段的所有可能(或大多数)值求和,则 CASE 会更快,因为它在汇总总和时不会多次扫描表。如果您只查找可能的 Subsid_Cde 字段的一小部分,那么单独的选择/连接(以及 Subsid_Cde 上的索引)会工作得更快。
你需要学会阅读执行计划,然后你就能够自己解决这些问题。
另外,您也可以对包含在 PIVOT 子句中的 Subsid_Cde 进行 GROUP BY(google for PIVOT MS SQL SERVER 2005)
| 归档时间: |
|
| 查看次数: |
6329 次 |
| 最近记录: |