Ich nahm etwas Code, der funktionieren sollte und sehen es funktioniert nicht als desinged, Ich ehrlich gesagt kämpfen, um zu bekommen, was falsch ist, muss ich alle Korb füllen, aber jetzt erst erst gefüllt Muss ich irgendeinen Drehpunkt machen? oder loswerden von update mit select? Id'like haben gleiche 5 Tx Reihen, und füllen Sie alle Korb für ALLE TxID, diese Selbst inklusive Beispiel unten wird dies veranschaulichen:TSQL-Update mit Select-Join-Problem
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
faszinierend. es ist wahrscheinlich undefiniertes (oder unbestimmtes) Verhalten. Versuchen Sie, die 'JOIN' der update-Anweisung durch' RIGHT JOIN' zu ersetzen und sehen Sie, was passiert. Könntest du einfach das 'CASE'-Zeug mit Unterabfragen zu' # lkup' umschreiben? – dlatikay
Tx Ich versuchte verwenden (Select) in Klammern statt Case und es dauert nicht, wahrscheinlich b'z der UPDATE-Syntax. mit RIGHT JOIN fängt es jetzt Prod1 UND Prod3 ein, aber immer noch nicht Prod2 (?). –
Korrektur: das funktioniert tatsächlich, aber wäre mein letzter Ausweg, ich habe auch man y Körbe und in Real-Setup habe ich in JOIN Select geschachtelt. UPDATE #tx SET # tx.Prod1 = (SELECT l.ProduktID FROM #lkup l WHERE l.Cust_ID = # tx.Cust_ID UND LINE = 1) –