我需要有关合并2查询的帮助。
QUERY 1:
SELECT anag.Negozio,anag.NomeNegozio,
ISNULL(SUM(ven.Quantita), 0) as PezziVenduti,
ISNULL(SUM(ven.Valore*ven.Quantita), 0) as TotaleVendite
FROM Dylog_NOL_Anagrafica AS anag
LEFT JOIN Dylog_NOL_Movimento AS ven ON anag.IDAnagrafica=ven.IDAnagrafica AND ven.TipoMovimento='VE'
WHERE anag.PortalID=709 AND anag.Negozio IN ('02', '01')
GROUP BY anag.Negozio, anag.NomeNegozio
HAVING ISNULL(SUM(ven.Quantita), 0)<>0
结果:
NEGOZIO|NOMENEGOZIO |PezziVenduti|TOTALE VENDITE
01|SEDE PRINCIPALE| 2| 51,78
QUERY 2
SELECT anag.Negozio,anag.NomeNegozio,
ISNULL(SUM(res.Quantita), 0) as PezziResi,
ISNULL(SUM(res.Valore*res.Quantita), 0) as TotaleResi
FROM Dylog_NOL_Anagrafica AS anag
LEFT JOIN Dylog_NOL_Movimento AS res ON anag.IDAnagrafica=res.IDAnagrafica AND res.TipoMovimento='RC'
WHERE anag.PortalID=709 AND anag.Negozio IN ('02', '01')
GROUP BY anag.Negozio, anag.NomeNegozio
HAVING ISNULL(SUM(res.Quantita), 0)<>0
结果:
NEGOZIO|NOMENEGOZIO |PEZZIRESI|TOTALERESI
01|SEDE PRINCIPALE| 1| 25,89
MERGE:
SELECT DISTINCT anag.Negozio,anag.NomeNegozio,
ISNULL(SUM(ven.Quantita), 0) as PezziVenduti,
ISNULL(SUM(ven.Valore*ven.Quantita), 0) as TotaleVendite,
ISNULL(SUM(res.Quantita), 0) as PezziResi,
ISNULL(SUM(res.Valore*res.Quantita), 0) as TotaleResi
FROM Dylog_NOL_Anagrafica AS anag
LEFT JOIN Dylog_NOL_Movimento AS ven ON (anag.IDAnagrafica=ven.IDAnagrafica AND ven.TipoMovimento='VE')
LEFT JOIN Dylog_NOL_Movimento AS res ON (anag.IDAnagrafica=res.IDAnagrafica AND res.TipoMovimento='RC')
WHERE anag.PortalID=709 AND anag.Negozio IN ('02', '01')
GROUP BY anag.Negozio, anag.NomeNegozio
HAVING ISNULL(SUM(ven.Quantita), 0)<>0
OR ISNULL(SUM(res.Quantita), 0)<>0
结果:
NEGOZIO|NOMENEGOZIO |PEZZI VENDUTI|TOTALE VENDITE|**PEZZI RESI|TOTALE RESI**
01|SEDE PRINCIPALE| 2| 51,78| **2| 51,78**
为什么错误的现场“PEZZI RESI”?正确的价值是1。
答案 0 :(得分:0)
我认为问题是{/ 1}}
OR
根据您的逻辑(ISNULL(SUM(PezziVenduti), 0) <> 0
OR ISNULL(SUM(PezziResi), 0) <> 0
),您可以使用IsNull(Sum(..)
答案 1 :(得分:0)
而不是“ISNULL(SUM(ven.Quantita),0)作为PezziVenduti”使用“ven.Quantita”。其他IsNull条目也是如此。这显然不是你想要的,但你会允许你看到一个你没想到的额外行。额外的左连接很可能导致额外的行总和。您可以使用一个左连接并在select中使用case语句来过滤TipoMovimento上的总和。希望这有帮助
;with Returned_And_Sold as
(
Select ID,
Type,
case when type = 'VE' then isnull(sum(M.Quantity),0) end as QuantitySold,
case when type = 'VE' then isnull(sum(M.Quantity*M.Value),0) end as TotalSold,
case when type = 'RC' then isnull(sum(M.Quantity),0) end as QuantityReturned,
case when type = 'RC' then isnull(sum(M.Quantity*M.Value),0) end as TotalReturned
from dbo.Dylog_NOL_Movimento M
where m.type in ('VE','RC')
group by ID,Type
having isnull(sum(M.Quantity), 0) <> 0
)
select
A.Shop,
A.StoreName,
S.QuantitySold,
S.TotalSold,
S.QuantityReturned,
S.TotalReturned
from Dylog_NOL_Anagrafica A
left JOIN Returned_And_Sold S on
S.ID = A.ID