Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 Update one table from tow tables

Author  Topic 

longinos
Starting Member

11 Posts

Posted - 2008-08-24 : 01:58:24
products:
prodID, qtyIn, QtyOun

supplierOrderDetails:
prodID, qty

customerOrderDetails:
prodID, qty

How can I update Products set qtyIn = sum(supplierOrderDetails.qty), qtyOut = sum(customerOrderDetails.qty)
I know very little sql and I got stock at this

GilaMonster
Master Smack Fu Yak Hacker

4507 Posts

Posted - 2008-08-24 : 04:49:59
Update Products
SET qtyIn = SuppTotalQty, qtyOut = CustTotalQty
from products
inner join (select sum(qty) as SuppTotalQty, prodID from supplierOrderDetails group by prodID) SuppTot on products.prodID = SuppTot.ProdID
inner join (select sum(qty) as CustTotalQty, prodID from customerOrderDetails group by prodID) CustTot on products.prodID = CustTot.ProdID


--
Gail Shaw
SQL Server MVP
Go to Top of Page

longinos
Starting Member

11 Posts

Posted - 2008-08-24 : 12:01:52
Thanks Gail Shaw I really like your Code, but it did not do what I was trying to do, maybe because I didn't explain it well,
I have allready found a solution which is very amateur, but it works, I wish someone can do it with fewer lines, and a simpler way
Here it is:

create table qtyi(qtyiID int not null identity(1,1),prodID int, qty int,)
insert into qtyi(prodID, qty)
select distinct SOrderDetails.prodID, SUM(sorderdetails.qty) from SOrderDetails
inner join Product on SOrderDetails.prodID = Product.prodID group by SOrderDetails.prodID

create table qtyo(qtyoID int not null identity(1,1), prodID int, qty int)
insert into qtyo(prodID, qty)
select distinct COrderDetails.prodID, SUM(COrderDetails.qty) from COrderDetails
inner join Product on COrderDetails.prodID = Product.prodID group by COrderDetails.prodID

update Product set QI = qtyi.qty from qtyi inner join Product on qtyi.prodID = Product.prodID

update Product set QO = qtyo.qty from qtyo inner join Product on qtyo.prodID = Product.prodID

drop table qtyi
drop table qtyo


Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-08-24 : 13:20:27
quote:
Originally posted by longinos

Thanks Gail Shaw I really like your Code, but it did not do what I was trying to do, maybe because I didn't explain it well,
I have allready found a solution which is very amateur, but it works, I wish someone can do it with fewer lines, and a simpler way
Here it is:

create table qtyi(qtyiID int not null identity(1,1),prodID int, qty int,)
insert into qtyi(prodID, qty)
select distinct SOrderDetails.prodID, SUM(sorderdetails.qty) from SOrderDetails
inner join Product on SOrderDetails.prodID = Product.prodID group by SOrderDetails.prodID

create table qtyo(qtyoID int not null identity(1,1), prodID int, qty int)
insert into qtyo(prodID, qty)
select distinct COrderDetails.prodID, SUM(COrderDetails.qty) from COrderDetails
inner join Product on COrderDetails.prodID = Product.prodID group by COrderDetails.prodID

update Product set QI = qtyi.qty from qtyi inner join Product on qtyi.prodID = Product.prodID

update Product set QO = qtyo.qty from qtyo inner join Product on qtyo.prodID = Product.prodID

drop table qtyi
drop table qtyo





WHy are you taking distinct while you're grouping by prodid. it already returns only one record per prodid so distinct is not required.
Also i cant understand how your solution differs from that provided by GilaMonster.Can you explain why the provided solution didnt work with some data example?
Go to Top of Page

longinos
Starting Member

11 Posts

Posted - 2008-08-24 : 17:07:41
quote:
Originally posted by visakh16

quote:
Originally posted by longinos

Thanks Gail Shaw I really like your Code, but it did not do what I was trying to do, maybe because I didn't explain it well,
I have allready found a solution which is very amateur, but it works, I wish someone can do it with fewer lines, and a simpler way
Here it is:

create table qtyi(qtyiID int not null identity(1,1),prodID int, qty int,)
insert into qtyi(prodID, qty)
select distinct SOrderDetails.prodID, SUM(sorderdetails.qty) from SOrderDetails
inner join Product on SOrderDetails.prodID = Product.prodID group by SOrderDetails.prodID

create table qtyo(qtyoID int not null identity(1,1), prodID int, qty int)
insert into qtyo(prodID, qty)
select distinct COrderDetails.prodID, SUM(COrderDetails.qty) from COrderDetails
inner join Product on COrderDetails.prodID = Product.prodID group by COrderDetails.prodID

update Product set QI = qtyi.qty from qtyi inner join Product on qtyi.prodID = Product.prodID

update Product set QO = qtyo.qty from qtyo inner join Product on qtyo.prodID = Product.prodID

drop table qtyi
drop table qtyo





WHy are you taking distinct while you're grouping by prodid. it already returns only one record per prodid so distinct is not required.
Also i cant understand how your solution differs from that provided by GilaMonster.Can you explain why the provided solution didnt work with some data example?



Sorry about the data example, I had problems using the sql publishing wizard, but I will tell you the diffrences that I found.
In the code of Gail Shaw it would only affect 18 rows, I gess because of the inner join, It didn't update all the rows that I wanted
and the code that I wrote it would affect first update 50 rows, and the second update would affect 18 rows, Updating all the rows that I wanted
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2008-08-25 : 00:11:28
ok.perhaps this was what you wanted:-

Update Products 
SET qtyIn = coalesce(SuppTotalQty,qtyIn),
qtyOut = coalesce(CustTotalQty,qtyOut)
from products
left outer join (select sum(qty) as SuppTotalQty, prodID from supplierOrderDetails group by prodID) SuppTot on products.prodID = SuppTot.ProdID
left outer join (select sum(qty) as CustTotalQty, prodID from customerOrderDetails group by prodID) CustTot on products.prodID = CustTot.ProdID


but without any data sample, its not easy to provide an accurate soln which is why Gila just made an attempt guessing that its soln you expected. Thats why we always suggest you to post some sample data.
Go to Top of Page
   

- Advertisement -