如何从单行创建多行(sql server 2008)

时间:2013-01-26 19:50:10

标签: sql sql-server-2008

在我们的组织中,我们有一个中央采购公司(CPC),然后通过公司间PO向我们的零售公司(Company_X)销售,然后销售给客户。 我需要做的是将我们的零售销售链接回原始采购订单。

例如,我有一个包含以下内容的表(以及许多其他列):

Company_X_Sales

InterCO_PO_no  Sales_Order_No  Part_No  Qty
-------------  --------------  -------  ---
12345          98765           ABCD     10

然后我有一张表格,其中包含以下内容:

CPC_Sales

PO_Number  InterCO_SO_No  Part_No  Qty
---------  -------------  -------  ---
00015      12345          ABCD     5  
00012      12345          ABCD     2  
00009      12345          ABCD     4   
00007      12345          ABCD     3 

所以你可以看到10件商品的最终销售是由来自中央公司的1个以上外部采购订单的部件组成的。

我需要做的是复制Company_X_Sales中的行,包括原始采购订单编号,并将数量设置为CPC_Sales

我最终需要这样的事情:

Company_X_Sales_EXTD

PO_Number  InterCO_PO_no  Sales_Order_No  Part_No  Qty
---------  -------------  --------------  -------  ---
00007      12345          98765           ABCD     3
00009      12345          98765           ABCD     4
00012      12345          98765           ABCD     2
00015      12345          98765           ABCD     1

我必须使用Company_X_Sales作为我的驾驶表 - CPC_Sales只是作为查找来获取原始采购订单编号。

希望你能帮助我在周末工作,因为这是一项工作时间非常激进的工作的一部分。

我不介意解决方案是否需要多次传递表或根据需要创建视图。我真的很挣扎。

2 个答案:

答案 0 :(得分:0)

我对你的问题感到有些困惑,但听起来你正试图让你的Company_X_Sales表有3行而不是1行,只是数量不一?如果是这样,这样的事情应该有效:

SELECT S.PO_Number, C.InterCO_PO_no, C.Sales_Order_No, C.Part_No, S.Qty
FROM Company_X_Sales C
   JOIN CPC_Sales S ON C.InterCO_PO_no = S.InterCO_SO_No

这是SQL Fiddle

这将为您提供正确数量的4行。然后你可以删除并重新插入。

要将这些行放入表中,您有几个选项,但这样的事情应该有效:

--Flag the rows for deletion
UPDATE Company_X_Sales SET Qty = -1 -- Or some arbitrary value that does not exist in the table

--Insert new correct rows
INSERT INTO Company_X_Sales 
SELECT C.InterCO_PO_no, C.Sales_Order_No, C.Part_No, S.Qty
FROM Company_X_Sales C
   JOIN CPC_Sales S ON C.InterCO_PO_no = S.InterCO_SO_No

--Cleanup flagged rows for deletion
DELETE FROM Company_X_Sales  WHERE Qty = -1
祝你好运。

答案 1 :(得分:0)

select [PO_Number],[InterCO_SO_No], Company_X_Sales.Sales_Order_No, [Part_No],[Qty] from CPC_Sales inner join Company_X_Sales on Company_X_Sales.InterCO_PO_no = CPC_Sales.InterCO_SO_no

两个表上的简单内连接将为您提供所需的结果IMHO。