简体   繁体   中英

Update column using the same column from another table and gruoping by another and make sum equal

There are 2 tables - DepoSevkDetay и SatisDetay . Both have columns - Miktar and UrunID . I need to make sum of Miktar in DepoSevkDetay for each UrunID equal to sum of Miktar in SatisDetay . Query I ve written cant handle it. What am I doing wrong? Considering that count of records in two tables is not equal

UPDATE Table_A SET Table_A.[Miktar] = (((Table_B.Miktar)/Table_C.c) + (case when ((Table_B.Miktar) % Table_C.c < Table_C.r) then 1 else 0 end )) FROM [Retail].[dbo].[tb_DepoSevkDetay] AS Table_A INNER JOIN ( SELECT SUM(Miktar)as Miktar, UrunID FROM tb_SatisDetay GROUP BY UrunID ) AS Table_B ON Table_A.[UrunID] = Table_B.[UrunID] INNER JOIN ( SELECT COUNT([UrunID]) AS c, ROW_NUMBER() OVER (ORDER BY UrunID) r, UrunID as UrunID FROM tb_DepoSevkDetay GROUP BY UrunID ) AS Table_C ON Table_B.[UrunID] = Table_C.[UrunID]

I would do it like this. First, I would make Miktar=0:

UPDATE [Retail].[dbo].[tb_DepoSevkDetay]
SET [Miktar] = 0

Then I would update all records but first with the Miktar equal to sum(Miktar)/(Count(*))

; with Table_A as (
 SELECT *,
 ROW_NUMBER() OVER (PARTITION BY UrunID ORDER BY UrunID) as rn,
 COUNT(*) OVER (PARTITION BY UrunID) as c
 [Retail].[dbo].[tb_DepoSevkDetay])
UPDATE
    Table_A
SET
    Table_A.[Miktar] = Table_B.Miktar/(Table_A.c)
FROM
    Table_A
    INNER JOIN (
                SELECT SUM(Miktar)as Miktar, UrunID
                FROM tb_SatisDetay
                GROUP BY UrunID ) AS Table_B
        ON Table_A.[UrunID] = Table_B.[UrunID]
WHERE Table_A.c > 0 and Table_A.rn > 1

And then I would update the remaining [Miktar]'s, like this:

UPDATE
    Table_A
SET
    Table_A.[Miktar] = Table_B.Miktar - Table_C.Miktar
FROM
    [Retail].[dbo].[tb_DepoSevkDetay] AS Table_A
    INNER JOIN (
                SELECT SUM(Miktar)as Miktar, UrunID
                FROM tb_SatisDetay
                GROUP BY UrunID ) AS Table_B
        ON Table_A.[UrunID] = Table_B.[UrunID]
    INNER JOIN (
                SELECT SUM(Miktar)as Miktar, UrunID
                FROM [Retail].[dbo].[tb_DepoSevkDetay]
                GROUP BY UrunID ) AS Table_C
        ON Table_A.[UrunID] = Table_C.[UrunID]
WHERE Table_A.[Miktar] = 0

Hopefully, it makes sense

your requirement is not very clear.

Explain with one example

update dd
set Miktar=sd.Miktar
DepoSevkDetay DD
inner join
(select UrunID, sum(Miktar) Miktar
from SatisDetay
group by UrunID)SD
on dd.UrunID=sd.UrunID

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM