从具有多个联接的视图中删除重复项

时间:2016-11-14 15:23:45

标签: sql-server

使用以下内容创建必需的视图,但需要在dbo.ORDRTXS.NO中删除任何带有重复项的行

SELECT     dbo.ORDRTRXS.REQ_DEL_DATE, dbo.ORDRTRXS.INV_NO, dbo.ORDRTRXS.PORDER_NO, dbo.ORDRTRXS.NO, dbo.ORDRHEAD.REP_CODE, 
                  dbo.SALEFILE.CUST_CODE, dbo.SALEFILE.CUST_NAME
FROM         dbo.SALEFILE INNER JOIN
                  dbo.ORDRTRXS ON dbo.SALEFILE.CUST_CODE = dbo.ORDRTRXS.DR_CODE INNER JOIN
                  dbo.ORDRHEAD ON dbo.ORDRTRXS.NO = dbo.ORDRHEAD.NO

尝试过使用ROW_NUMBER但没有运气

ORDRTXS表

REQ_DEL_DATE | INV_NO | PORDER_NO |没有| DR_CODE

2016/11/11 | 12345 | M123 | 1111 | A22

2016/11/11 | 12345 | M123 | 1111 | A22

12/11/2016 | 12336 | 4455 | 1122 | Z11

ORDERHEAD表

没有| REP_CODE

1111 | AB

1111 | AB

1122 | XY

SALEFILE TABLE

CUST_CODE | CUSTNAME

A22 |客户一

Z11 |客户二

必读视图

REQ_DEL_DATE | INV_NO | PORDER_NO |没有| DR_CODE | REP_CODE | CUSTNAME

2016/11/11 | 12345 | M123 | 1111 | A22 | AB |客户一

12/11/2016 | 12336 | 4455 | 1122 | Z11 | XY |客户二

2 个答案:

答案 0 :(得分:0)

这些是消除重复的快速方法(修复出现的症状,但不是真正的问题)。我会问为什么在使用这些答案之前你会得到重复的东西。

  1. 在我看来,SALEFILE包含客户详细信息
  2. ORDRHEAD特定于表示客户特定订单的客户
  3. ORDRTRXS是特定于订单的行(项目)。
  4. 所以......问题变成了重复发生,因为同一个项目和po在同一个订单上出现了多行?如果是这样,你只需要“总和”数量?但这隐藏了交易号码......

    <pre>

答案 1 :(得分:0)

在加入之前,您必须DISTINCT dbo.ORDRTRXS表。请尝试下面的代码。

SELECT tr.REQ_DEL_DATE, tr.INV_NO, tr.PORDER_NO, tr.NO, oh.REP_CODE
    ,  sf.CUST_CODE, sf.CUST_NAME
FROM dbo.SALEFILE sf
INNER JOIN (
    SELECT DISTINCT REQ_DEL_DATE, INV_NO, PORDER_NO, NO, DR_CODE
    FROM dbo.ORDRTRXS
) tr ON tr.DR_CODE = sf.CUST_CODE
INNER JOIN dbo.ORDRHEAD oh ON oh.NO = tr.NO