2012-11-27 32 views
1

我有交易的表像下你如何與多個可能的匹配一對一地加入記錄......?

| 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發佈’交易有項目編號。我想更新'發行'交易的[物料編號]字段以包含物料編號。當我在日期,數量和總計上加入時,我得到類似這樣的東西

| 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 | 

要麼將​​被罰款。什麼是簡單的解決方案?

+0

您確定這是一個安全的連接條件嗎?有什麼更好,或更獨特?如果沒有別的辦法,你試圖將記錄與現有的「工作秩序」聯繫起來,這可能是不正確的(並且可能讓你面對法律問題)。 –

+0

在兩個不同的工作訂單上,對於兩個不同的交易,所有的字段都是相同的,但是在這種情況下,哪個交易得到匹配並不重要。信息是相同的,除了識別表格中的記錄外,ID沒有任何意義。 – Kelly

回答

0

使用SELECT DISTINCT來過濾相同的結果,或者您可以對結果進行分區以獲得每個分組中的第一項。

UPDATE

下面就來說明分區方法的代碼。

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 
相關問題