我拿了一些应该工作的代码,看到它不能像设计那样工作, 我坦率地努力解决问题,我需要填补所有篮子,但现在只有第一次填补,我需要做任何支点吗?或者用select来摆脱更新?我喜欢拥有相同的5个Tx行,并为所有TxID填充所有篮子,下面的这个自包含示例将说明这一点:
SELECT * INTO #lkup FROM ( -- drop table #lkup -- select * from #lkup
SELECT 201 Cust_ID, 1 Line, 'Pr1' ProductID UNION
SELECT 201 Cust_ID, 2 Line, 'Pr20' ProductID UNION
SELECT 201 Cust_ID, 3 Line, 'Pr333' ProductID ) g
SELECT * INTO #tx FROM ( -- drop table #tx -- select * from #tx
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12001 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12002 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12003 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12004 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12005 TxID ) g
UPDATE tx
SET Prod1 = CASE WHEN LINE =1 THEN ProductID END,
Prod2 = CASE WHEN LINE =2 THEN ProductID END,
Prod3 = CASE WHEN LINE =3 THEN ProductID END
--- SELECT l.Line, l.ProductID, tx.*
FROM #tx tx
JOIN #lkup l ON l.Cust_ID = tx.Cust_ID
SELECT * FROM #tx -- update #tx set Prod1 = ' ', Prod2 = ' ', Prod3 = ' '
SELECT 'Shouldbe' , '201' CustID, 'Pr1' Prod1, 'Pr20' Prod1, 'Pr333' Prod1, 12001 TxID -- for each Tx 5 rows Total
答案 0 :(得分:0)
您可以使用此代码块。
UPDATE tx
SET Prod1 = l.ProductID,
Prod2 = l2.ProductID,
Prod3 = l3.ProductID
--- SELECT l.Line, l.ProductID, tx.*
FROM #tx tx
LEFT JOIN #lkup l ON l.Cust_ID = tx.Cust_ID AND l.Line=1
LEFT JOIN #lkup l2 ON l2.Cust_ID = tx.Cust_ID AND l2.Line=2
LEFT JOIN #lkup l3 ON l3.Cust_ID = tx.Cust_ID AND l3.Line=3
答案 1 :(得分:0)
问题当然是你不止一次更新同一行。奇怪的是,这不是错误,但如果我正确理解你的代码,你可以这样做:
UPDATE tx
SET tx.Prod1 = L.Prod1,
tx.Prod2 = L.Prod2,
tx.Prod3 = L.Prod3
FROM #tx tx
cross apply (
SELECT
Cust_ID,
Prod1 = max(CASE WHEN LINE =1 THEN ProductID END),
Prod2 = max(CASE WHEN LINE =2 THEN ProductID END),
Prod3 = max(CASE WHEN LINE =3 THEN ProductID END)
FROM #lkup
group by Cust_ID
) L where L.Cust_ID = tx.Cust_ID
结果:
Cust_ID Prod1 Prod2 Prod3 TxID
1 201 Pr1 Pr20 Pr333 12001
2 201 Pr1 Pr20 Pr333 12002
3 201 Pr1 Pr20 Pr333 12003
4 201 Pr1 Pr20 Pr333 12004
5 201 Pr1 Pr20 Pr333 12005