![](/img/trans.png)
[英]How to create multiple rows from conditions on columns in a single row in SQL
[英]How can I create multiple rows from a single row (sql server 2008)
在我们的组织中,我们有一个中央采购公司(CPC),然后通过公司间采购订单将其出售给我们的零售公司(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个以上外部PO的零件组成的。
我需要做的是复制Company_X_Sales
的行,包括原始PO编号,并将数量设置为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
只是作为查找以获取原始PO编号的查找。
希望您能帮我整个周末工作,因为这是一项工作量很大的工作的一部分。
我不介意该解决方案是否需要多次通过表格或根据需要创建视图。 我真的很挣扎。
您的问题让我有些困惑,但是听起来您正在尝试使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
祝好运。
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
在两个表上进行简单的内部联接将为您提供所需的结果恕我直言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.