首页 > 解决方案 > 从sql中的join复制行

问题描述


我有两个表:文档标题和文档行。

从我正在使用的文档标题:
- 文档编号
- 导入时间
- 责任中心

从我要起诉的文档行:
- 否_

我的代码示例:


SELECT 
       DocHeader.[Document No_]             AS DocNo
      ,DocHeader.[Imported on]              AS ImportedOn
      ,DocLine.No_                          AS BoxNo
      ,DocHeader.[Responsibility Center]    AS Center
      ,CASE 
             WHEN DocHeader.[Status] = 0 THEN 'Posted'
             WHEN DocHeader.[Status] = 1 THEN 'Imported'
             WHEN DocHeader.[Status] = 2 THEN 'Processed'
             WHEN DocHeader.[Status] = 3 THEN '3'
             ELSE 'Empty'
             END AS STATUS

  FROM [MDR].[dbo].[nav_BG$IC_Document_Header]  AS DocHeader
  JOIN [MDR].[dbo].[nav_BG$IC_Document_Line]    AS DocLine      ON DocHeader.[Document No_] = DocLine.[Document No_]
  WHERE DocHeader.[Document No_] = 'BGLTD0005237'



问题是我的代码从同一个文档中创建了多行。
一个 DocNo 可以有多个 BoxNo。
他为每个 DocNo 制作双倍的 BoxNo。
我在哪里做错了什么?
结果示例:

DocNo ImportedOn BoxNo Center Status

1234  2019-11-20  12    B01    Posted
1234  2019-11-20  12    B01    Posted
7777  2019-11-20  12    B01    Posted
7777  2019-11-20  12    B01    Posted


正确的方法是:

DocNo ImportedOn BoxNo Center Status
1234  2019-11-20  12    B01    Posted
7777  2019-11-20  12    B01    Posted



解决方案是在文档类型的 where 子句中添加过滤器。

标签: sqljoindoublerow

解决方案


您是否尝试过使用 MAX() 函数?它将返回所选列的最大值,如果我正确理解了您的问题,应该删除您重复的行。

MAX(DocHeader.[Document No_]) AS DocNo

推荐阅读