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.