sum列与另一个表中的重复项

时间:2016-02-25 20:45:31

标签: sql-server sql-server-2012

错误的结果
所以我有两张桌子

  1. 订单
  2. 分期
  3. 具有列结构的订单表

    +-------+---------+-------------+---------------+----------+
    |  PO   | cashAmt | ClaimNumber | TransactionID | Supplier |
    +-------+---------+-------------+---------------+----------+
    | 12345 |     100 |       99876 | abc123        |     0101 |
    | 12346 |      50 |       99875 | abc123        |     0102 |
    | 12345 |     100 |       99876 | abc123        |     0101 |
    +-------+---------+-------------+---------------+----------+
    

    具有列结构的分段表

    +----------+------------+-------------+---------------+
    | PONumber | paymentAmt | ClaimNumber | TransactionID |
    +----------+------------+-------------+---------------+
    |    12345 |        100 |       99876 | abc123        |
    |    12346 |         50 |       99875 | abc123        |
    +----------+------------+-------------+---------------+
    

    我正在执行的查询是

    select sum(cashAmt) CheckAmount, count(ClaimNumber) TotalLines
    FROM [order]  with (nolock)
    WHERE TransactionID='abc123'
    union
    select sum(paymentAmt) CheckAmount, count(ClaimNumber) TotalLines
    from Staging with (nolock)
    where TransactionID='abc123'
    

    但由于其中一个表中存在重复,因此总和变得混乱。

    我如何编辑,我只从订单表中获取唯一的,且总和是正确的

2 个答案:

答案 0 :(得分:0)

假设表中的重复项没问题。

不确定为什么你没有使用锁,似乎不应该包含它。

您可以使用表变量来存储不同的值。您需要调整表变量中的数据类型以匹配表结构。

我还没有对下面的代码进行测试,但看起来应该是这样的。

DECLARE @OrderTmp TABLE (
  cashAmt MyNumericColumn numeric(10,2)
  , ClaimNumber int
  , TransactionID Int
)
INSERT INTO @OrderTmp
select Distinct 
    cashAmt
    ,ClaimNumber
    ,TransactionID 
FROM 
    [order] 
WHERE TransactionID='abc123'

SELECT DISTINCT 
select sum(cashAmt) CheckAmount, count(ClaimNumber) TotalLines
FROM @OrderTmp 
where TransactionID='abc123'
union
select sum(paymentAmt) CheckAmount, count(ClaimNumber) TotalLines
from Staging
where TransactionID='abc123'

答案 1 :(得分:0)

首先问问自己为什么Orders表中有重复项?必须有他们在那里的原因。我会先解决这个问题。

除了问题之外,如果Orders表中的重复项有目的但是不考虑此特定查询,那么您应该能够通过简单地更改查询以使用{{1}来省略重复项在Orders表中的任何字段上都可以可靠地识别副本。

DISTINCT等。