| Author |
Topic |
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 18:51:10
|
| I have 2 tables and need to update records in table 1 from table 2 based upon a status from table 2. ProductName would be updated if Status = A from table 2Table 1:ProductId ProductName Status1 Name1 A2 Name2 D3 Name3 ATable 2:POverrideId ProductId ProductName Status1 1 NewName1 A2 2 NewName2 A3 3 NewName4 DResultProductId ProductName 1 NewName12 NewName23 Name3I'm drawing a blank....Thanks, |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 19:21:22
|
| Try this DougRUPDATE aSET a.productname = b.productnameFROM TABLE1 a JOIN TABLE2 bON a.productid=b.productidWHERE b.status = 'A' |
 |
|
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 19:37:08
|
| Thanks Mivey4That was the direction I was headed. What if Table 1 and table 2 looked this way:Table1ProductId ProductName PColor Status1 Name1 C1 A2 Name2 C2 D3 Name3 C3 A4 Name4 C4 A5 Name5 C5 ATable2POverride ProductId ProductName PColor Status1 1 NewName1 NULL A2 2 NULL NewC2 A 3 3 NewName3 C3 DThanks |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 19:46:42
|
| Not certain what you're expecting DougR, but the resulting logic would remain the same.Given the new example you provided you'd get:ResultProductId ProductName1 NewName12 NULL3 Name3If you don't want NULL values to be updated even if the status is "A" in table2, then you'd set a WHERE clause to omit that condition in the update.Make sense? |
 |
|
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 19:57:34
|
| That's my confusion.... Let's make it a SELECT instead...The result should look like:ProductId ProductName PColor Status1 NewName1 C1 A2 Name2 NewC2 A3 Name3 C3 D4 Name4 C4 A5 Name5 C5 AThanks for the replies. |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 20:23:54
|
| Don't you mean the results would be:1 NewName1 C1 A2 Name2 NewC2 A3 Name3 C3 D4 Name4 C4 A5 Name5 C5 ASince you initially stated that only records in table2 which have a status of A would be updated in table1. Otherwise, you've changed your own requirements. |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 20:26:11
|
| Actually, I meant your result should be1 NewName1 C1 A 2 Name2 NewC2 A 3 Name3 C3 A 4 Name4 C4 A 5 Name5 C5 A |
 |
|
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 20:37:59
|
| Can I start over....Table1ProductId ProductName PColor Status1 Name1 C1 A2 Name2 C2 D3 Name3 C3 A4 Name4 C4 A5 Name5 C5 ATable2POverride ProductId ProductName PColor Status1 1 NewName1 NULL A2 2 NULL NewC2 A 3 3 NewName3 C3 DNeed to select all records in Table1 and show the new values for Table1 based on Table2 data and Table2 Status of A only.ProductId ProdName PColor Status1 NewName1 C1 A 2 Name2 NewC2 A 3 Name3 C3 A 4 Name4 C4 A 5 Name5 C5 A THANKS! |
 |
|
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 20:39:21
|
| I was thinking of something like:SELECT tblProduct.ProductId ,tblProduct.ProductName = CASE WHEN tblProduct.tblProductName = ISNULL(tblProductOverride.ProductName, '') THEN tblProduct.ProductName ELSE tblProductOverride.ProductName ENDFROM tblProduct join tblProductOverride on tblProduct.ProductId = tblProductOverride.ProductIdWHERE tblProductOverride.RecordStatus='A' |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 20:52:32
|
You're on the right track. It's actually:UPDATE aSET a.productname = CASE WHEN b.productname IS NULL THEN a.productnameELSE b.productname END,a.PColor = CASE WHEN b.PColor IS NULL THEN a.PColorELSE b.PColor END,a.status = CASE WHEN b.status IS NULL THEN a.statusELSE b.status ENDFROM TABLE1 a JOIN TABLE2 bON a.productid=b.productidWHERE b.status = 'A'Good Luck! |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 21:02:44
|
Oh forgot, your SELECT statement would beSELECT CASE WHEN b.productname IS NULL THEN a.productnameELSE b.productname END,CASE WHEN b.PColor IS NULL THEN a.PColorELSE b.PColor END,CASE WHEN b.status IS NULL THEN a.statusELSE b.status ENDFROM TABLE1 B LEFT OUTER JOIN TABLE2 AON a.productid=b.productidWHERE b.status = 'A' |
 |
|
|
mivey4
Yak Posting Veteran
66 Posts |
Posted - 2009-10-01 : 21:05:44
|
| Or you may want to omit the WHERE clause:SELECT CASE WHEN b.productname IS NULL THEN a.productnameELSE b.productname END,CASE WHEN b.PColor IS NULL THEN a.PColorELSE b.PColor END,CASE WHEN b.status IS NULL THEN a.statusELSE b.status ENDFROM TABLE1 B LEFT OUTER JOIN TABLE2 AON a.productid=b.productid |
 |
|
|
DougR
Starting Member
6 Posts |
Posted - 2009-10-01 : 23:21:54
|
| Excellent.Thanks! |
 |
|
|
|