Tsql 左外接递增和。如何预防?
以下是查询的简化版本,但其基本要点是:Tsql 左外接递增和。如何预防?,tsql,ssms,Tsql,Ssms,以下是查询的简化版本,但其基本要点是: 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
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有其自己的费用表,该表细分为我在CTE选择中需要的最后一个案例/总额行的更精细的细节
我尝试在尽可能多的索引上使用[ExpenseType2]表的左连接测试上述查询,我注意到在执行此操作时,2_美元的总和更高。我假设它正在生成多条记录,即使我没有从[ExpenseType2]表中选择任何内容
我如何防止这种情况
谢谢,为什么不使用子查询?还是简单的select语句?或者,您可能需要使用示例数据断言更多信息
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
请阅读一些关于改进您的问题的提示。