Результаты неверны при использовании СУММ возвращает значения в 3 раза выше - PullRequest
0 голосов
/ 26 мая 2020
ALTER PROCEDURE [dbo].[STOR_totalforadmin]
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- Interfering with SELECT statements.

    SET NOCOUNT ON;

    -- SELECT * FROM tblDraw         

    SELECT tblretailer.ID,Name as retailername, tblretailer.AbcRate,   tblretailer.AbRate, 
           tblretailer.BoxRate, tblretailer.StraightRate,
           sum(isnull(ACount, 0)) as atotal ,
           sum(isnull(BCount, 0)) as Btotal,
           sum(isnull(CCount, 0)) as Ctotal,
           SUM(isnull(Count,0)) as strtotal,
           SUM(isnull(BoxCount,0)) as boxtotal,
           SUM(isnull(ABCount,0))as abtotal,
           SUM(isnull(ACCount,0))as actotal,
           SUM(isnull(BCCount,0)) as bctotal
    FROM tblretailer  FULL JOIN Tbl_ABC abc  ON (abc.RetailerID=tblretailer.ID)
    FULL JOIN TblDraw  Draw ON (Draw.RetailerID=tblretailer.ID)
    FULL JOIN Tbl_ABACBC abbc  ON (abbc.RetailerID=tblretailer.ID) 
    GROUP BY Name, tblretailer.ID, tblretailer.AbcRate, tblretailer.AbRate, tblretailer.BoxRate, tblretailer.StraightRate
END

Ответы [ 2 ]

0 голосов
/ 26 мая 2020
• 1000 *

Результат:

Id    t1Sum    t2Sum
1     20       30
2     20       30
3     30       0

Id 1 в table1 имеет значение суммы 10, но почему результат равен 20?

тогда мы выполняем следующий запрос (без сводки и группировки по):

select  
        *
from
        @table1 t1 full join @table2 t2 on t1.id = t2.id

Результат:

Id    Value     Id    Value
1     10        1     10
1     10        1     20
2     20        2     30
3     30        NULL  NULL

, поскольку мы используем full join, запись с Id = 1 в @table1 дублируется из-за двух записей с Id = 1 в @ table2.

0 голосов
/ 26 мая 2020

Разделите сумму на 3 следующим образом:

sum(isnull(ACount, 0))/3

для всех.

...