【问题标题】:Unable to remove duplicates in SQL Query with JOIN and DISTINCT无法使用 JOIN 和 DISTINCT 删除 SQL 查询中的重复项
【发布时间】: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


【解决方案1】:

你可以这样试试

select * from demo;
+------+-------+
| id   | des   |
+------+-------+
|    1 | afgg  |
|    2 | aaaaa |
+------+-------+

select * from test;
+------+---------+
| id   | name    |
+------+---------+
|    2 | aaaaa   |
|    1 | assdasa |
+------+---------+

select id as id,des as description,'' as id,'' as name from demo UNION select '' as id ,''as description,id as id,name as name from test;
+------+-------------+------+---------+
| id   | description | id   | name    |
+------+-------------+------+---------+
| 1    | afgg        |      |         |
| 2    | aaaaa       |      |         |
|      |             | 2    | aaaaa   |
|      |             | 1    | assdasa |
+------+-------------+------+---------+
4 rows in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 2021-04-23
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多