【发布时间】:2016-12-01 12:03:20
【问题描述】:
我有一个关于现实世界示例的抽象问题。我正在尝试运行一个与我要加入的表存在问题的查询。
在我的查询初稿中,如果我添加一个 Distinct 并且只需要一个 Inner Join,我会总结正确的值。
我产生的值需要分成 4 个其他总数,这取决于某些值。当我在查询中添加具有这些值的表并将其添加到我的联接或 where 子句时,它会获取这些总计并将值的每次迭代与相应的值相加。
我的查询:
SELECT DISTINCT SUM(CASE WHEN Tax_Records.TaxValue = '0.06' THEN Bill_Summary.NonSalesTax
WHEN Tax_Records.TaxValue = '0.065' THEN Bill_Summary.NonSalesTax
WHEN Tax_Records.TaxValue = '0.07' THEN Bill_Summary.NonSalesTax
WHEN Tax_Records.TaxValue = '0.075' THEN Bill_Summary.NonSalesTax ELSE 0.0 END)
AS 'UnTaxable Sales'
FROM Order_Records INNER JOIN Bill_Summary ON Order_Records.RowNum = Bill_Summary.OrderNumID
LEFT JOIN Tax_Records ON Order_Records.OZipCode = Tax_Records.tZipCode
WHERE Order_Records.Date Between 'DATE' And 'DATE'
AND Order_Records.cState = 'state'
GROUP BY Tax_Records.TaxValue
我的查询运行正确,但我得到了错误的总数,如果我删除了 LEFT JOIN 并且它是 SELECT 语句中的相应项目,我得到了正确的总数。 Tax_Records 表与数据库中的任何其他表都没有关系,所以我知道将它放在 Join 中会导致问题。
我更改了我的查询以查看为什么我得到不正确的总数,这是因为它会根据我选择的案例总结一个值。
例如有一个值为 5 的 Bill_Summary,它将 5 加起来 4 次,每个税值加 1。所以我知道它为什么会这样做,但我想知道如何将税表中的信息添加到我的查询中,以从我原来的正确总数中得出 4 个值。
我尝试了不同的 JOINS、嵌入式 SELECT 和 CTE,但没有一个能正常工作。
编辑:所有这些数据都来自客户下的订单。 我们希望看到的是在 1 个月内从某个州税中征收的税款总额。所以从 3 月 1 日到 4 月 1 日。
按 6% 税率收取的所有销售额等于 50 美元。 所有按 6.5% 税率征收的销售额等于 65 美元。 所有按 7% 税率征收的销售额等于 20 美元。 所有按 7.5% 税率征收的销售额等于 15 美元。
如果我在未加入 Tax_Records 表的情况下运行查询,我会得到正确的总计 145 美元。
不,我想通过将 Order_Records 表中的 Zip Codes 与 Tax_Records 表中的 Zip Codes 相结合来显示分成 4 个值的总数。
如果我这样做,假设 7.5% 的价值,这些销售额的总和是 15 美元。一笔销售额是 8 美元,另一笔是 7 美元,如果我加入 Tax_Records 表,它会运行查询以显示从销售额中收取的税款总数为 8 美元,分别为 6%、6.5%、7% 和 7.5%。 7 美元的订单现在显示我的 7.5% 总额为 60 美元,而不是应该的 15 美元。
【问题讨论】:
-
您能否提供一个示例输入,然后提供不正确的结果和您希望看到的结果?我无法查看您的问题。
-
同意@ArthurDaniels 但我会担心
GROUP BY以及可能的重复原因 -
好的,我会编辑我的帖子。
标签: sql-server join distinct