一尘不染

将多个表中的多个列组合成一个统一表

sql

我有 2 张表,1 张有工作信息:

Table A:

Job Number Product Quantity Release Week
Job A Prod A 20 20
Job B Prod A 50 10
Job C Prod B 85 21

另一个表具有来自表 A 的作业的源信息的重制信息:

Table B:

Remake Job Number Original Job Number Remake Quantity
R1-Job A Job A 5
R1-Job B Job B 10
R1-Job C Job C 2

我试图获得的输出是所有工作的统一列表,以及来自两个表的相关信息(表 B 中每个翻拍的产品/发布周从表 A 中的原始工作中提取)。

Output Expected:

Job Number Product Quantity Release Week
Job A Prod A 20 20
Job B Prod A 50 10
Job C Prod B 85 21
R1-Job A Prod A 5 20
R1-Job B Prod A 10 10
R1-Job C Prod B 2 21

我尝试通过使用 case 语句进行左连接,如下所示:

SELECT CASE WHEN B.[Remake Job Number] is not null THEN B.[Remake Job Number] ELSE A.[Job Number] 
END as [Job Number], A.[Product], CASE WHEN B.[Remake Job Number] is not null THEN 
B.[Remake Quantity] ELSE A.[Quantity] END as [Quantity], A.[Release Week] from [Table A] as A
LEFT JOIN (SELECT [Remake Job Number], [Remake Quantity], [Original Job Number] from [Table B]) as B on A.[Job Number] = B.[Original Job Number]

这最终给了我一份没有重拍的所有工作的列表和适当的信息,以及所有具有正确信息的重拍工作,但缺少带有适当信息的重拍的原始工作编号。我可以看到正在发生的事情,但我不确定如何将那些带有重制的原始工作编号添加回列表中(除了一些奇怪的 IN 语句)。我还尝试使用 COALESCE 获得与上述类似的结果。

使用 SQL Server,任何帮助表示赞赏。


阅读 97

收藏
2022-07-22

共1个答案

一尘不染

您可以使用UNION ALL组合两个查询的结果。

首先,从 with 获取所有内容Table A,然后将其与另一个查询结合,该查询将来自Table Awith 的信息Table B

就是这样:

SELECT 
  A.[Job Number],
  A.[Product],
  A.[Quantity],
  A.[Release Week]
FROM
  [Table A] AS A

UNION ALL

SELECT
  B.[Remake Job Number],
  A.[Product],
  B.[Remake Quantity],
  A.[Release Week]
FROM
  [Table B] AS B
  INNER JOIN [Table A] AS A ON
    A.[Job Number] = B.[Original Job Number]
2022-07-22