你如何与多个可能的比赛一对一地加入记录......?

时间:2012-11-27 21:35:28

标签: sql tsql sql-server-2008-r2

我有一个交易表,如下所示

| ID | Trans Type | Date       | Qty | Total | Item Number | Work Order |
-------------------------------------------------------------------------
|  1 | Issue      | 11/27/2012 |   3 |  3.50 |        NULL |         10 |
|  2 | Issue      | 11/27/2012 |   3 |  3.50 |        NULL |         11 |
|  3 | Issue      | 11/25/2012 |   1 |  1.25 |        NULL |         12 |
|  4 | ID Issue   | 11/27/2012 |  -3 | -3.50 |         100 |       NULL |
|  5 | ID Issue   | 11/27/2012 |  -3 | -3.50 |         102 |       NULL |
|  6 | ID Issue   | 11/25/2012 |  -1 | -1.25 |         104 |       NULL |

这些交易是重复的,其中'发行'具有工单ID,而'ID发行'交易具有项目编号。我想更新“问题”交易的[项目编号]字段以包括项目编号。当我在Date,Qty和Total上加入时我会得到类似的东西

| ID | Trans Type | Date       | Qty | Total | Item Number | Work Order |
-------------------------------------------------------------------------
|  1 | Issue      | 11/27/2012 |   3 |  3.50 |         100 |         10 |
|  1 | Issue      | 11/27/2012 |   3 |  3.50 |         102 |         10 |
|  2 | Issue      | 11/27/2012 |   3 |  3.50 |         100 |         11 |
|  2 | Issue      | 11/27/2012 |   3 |  3.50 |         102 |         11 |
|  3 | Issue      | 11/25/2012 |   1 |  1.25 |         104 |         12 |

重复数字倍增!我想要这个

| ID | Trans Type | Date       | Qty | Total | Item Number | Work Order |
-------------------------------------------------------------------------
|  1 | Issue      | 11/27/2012 |   3 |  3.50 |         100 |         10 |
|  2 | Issue      | 11/27/2012 |   3 |  3.50 |         102 |         11 |
|  3 | Issue      | 11/25/2012 |   1 |  1.25 |         104 |         12 |

或者这个(项目编号切换为两场比赛)

| ID | Trans Type | Date       | Qty | Total | Item Number | Work Order |
-------------------------------------------------------------------------
|  1 | Issue      | 11/27/2012 |   3 |  3.50 |         102 |         10 |
|  2 | Issue      | 11/27/2012 |   3 |  3.50 |         100 |         11 |
|  3 | Issue      | 11/25/2012 |   1 |  1.25 |         104 |         12 |

要么没事。什么是简单的解决方案?

1 个答案:

答案 0 :(得分:0)

使用SELECT DISTINCT过滤相同的结果,或者您可以对结果进行分区以获得每个分组中的第一项。

更新

这是用于说明分区方法的代码。

SELECT ID, [Trans Type], [Date], [Qty], [Total], [Item Number], [Work Order]
FROM
(
    SELECT 
        ID, [Trans Type], [Date], [Qty], [Total], [Item Number], [Work Order], ROW_NUMBER() OVER 
            (PARTITION BY ID, [Trans Type], [Date], [Qty], [Total]
             ORDER BY [Item Number]) AS ItemRank
    FROM YourTable
) AS SubQuery
WHERE ItemRank = 1