tsql - 左外连接增加总和。如何预防?
问题描述
下面是查询的简化版本,但它的基本要点:
WITH ClientSpend AS
(
SELECT
c.ClientName
, CONVERT(INT, (ROUND(SUM(CASE WHEN e.Type = 1 THEN e.Dollars ELSE 0 END), 0))) AS 1_Dollars
, CONVERT(INT, (ROUND(SUM(CASE WHEN e.Type = 2 THEN e.Dollars ELSE 0 END), 0))) AS 2_Dollars
-- There's a bunch more of these for different 'Types'
FROM Expense e WITH(NOLOCK)
INNER JOIN Client c WITH(NOLOCK)
ON c.ClientID = e.ClientID
GROUP BY c.ClientName
)
SELECT
ClientName
, 1_Dollars
, 2_Dollars
FROM ClientSpend
GROUP BY ClientName
类型 2 有它自己的 Expense 表,它分解成更细化的细节,我需要在 CTE SELECT 中的最后一个 CASE/SUM 行。
我尝试使用 LEFT JOIN 对此 [ExpenseType2] 表尽可能多的索引来测试上述查询,并且我注意到执行此操作时 2_Dollars 上的 SUM 更高。我假设它正在制作多条记录,即使我没有从 [ExpenseType2] 表中选择任何内容。
我该如何防止这种情况?
谢谢,
解决方案
为什么不使用子查询?还是一个简单的选择语句?或者您可能需要使用示例数据断言更多信息。
SELECT first_name, 1_Dollars, 2_Dollars FROM
(
SELECT
c.ClientName
, CONVERT(INT, (ROUND(SUM(CASE WHEN e.Type = 1 THEN e.Dollars ELSE 0 END), 0))) AS 1_Dollars
, CONVERT(INT, (ROUND(SUM(CASE WHEN e.Type = 2 THEN e.Dollars ELSE 0 END), 0))) AS 2_Dollars
-- There's a bunch more of these for different 'Types'
FROM Expense e WITH(NOLOCK)
INNER JOIN Client c WITH(NOLOCK)
ON c.ClientID = e.ClientID
GROUP BY c.ClientName
) a
推荐阅读
- javascript - 标签等于特定文本时如何隐藏多个Div
- postgresql - 在 Hasura 中创建多对多关系
- html - 即使使用了 height 和 width 属性,图像也没有在 css 中调整大小
- css - 如何使用 CSS 2 将文本连续换行而没有空格?
- arrays - VBA 中的 Vlookup 等效项与 ARRAYS 中的 APROXIMATE MATCH
- paypal - NextJs 从 Paypal 获取交易响应
- c# - 如何使用两个可选路由值配置路由?
- javascript - 在 ReactJS 中,使用子组件后渲染中断
- android - 当两个依赖项使用FFmpeg时如何解决不满意的链接错误
- amazon-web-services - 使用 Amazon S3 SignedURL 从浏览器客户端 PUT 文件是否安全?