SQL - Умноженный столбец неправильно суммируется - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть запрос, в котором мне нужно взять два столбца (одно количество и одну цену), умножить два вместе, чтобы получить выпущенную стоимость (на компонент), а затем СУММИТЬ их во втором. Эти части рассчитаны правильно. Область, с которой у меня возникают проблемы, подводит итоги. Когда я суммирую эту область, я получаю неверный результат.

Вот полный запрос (включая объединение всех). Столбец, в котором я суммирую проблему, - это «Общая стоимость выданных» во втором запросе. Следует взять столбец «Выданная стоимость» из первого запроса (T1.IssuedQty * T2.Price) и суммировать их.

Значение, которое я получаю, неверно (намного выше)

Вот мой запрос

SELECT DISTINCT CONVERT(NVARCHAR(100), T0.DOCNUM) AS 'Production Order'
    ,CONVERT(NVARCHAR(100), ((T1.IssuedQty) * T2.Price)) AS 'Issued Cost'
    ,'' 'Total Issued Cost'
FROM OWOR T0
INNER JOIN WOR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
LEFT JOIN IGE1 T2 ON T2.BaseEntry = T1.DocEntry
    AND T2.BaseType = '202'
    AND T1.ItemCode = T2.ItemCode
LEFT JOIN IGN1 T3 ON T3.BaseEntry = T0.DocEntry
    AND T3.BaseType = '202'
LEFT JOIN IGN1 T8 ON T8.BaseEntry = T0.DocEntry
    AND T3.BaseType = '202'
    AND T8.ItemCode = T0.ItemCode
LEFT JOIN ORSC T4 ON T1.Itemcode = T4.ResCode
FULL OUTER JOIN (
    SELECT ITT1.Code 'BOMCODE'
        ,ITT1.Father 'BomFather'
        ,ITT1.VisOrder
        ,ITT1.Quantity
    FROM ITT1
    ) ITT1 ON T0.Itemcode = ITT1.BomFather
    AND T1.Linenum = ITT1.VisOrder

UNION ALL

SELECT T0.DocNum 'Production Order'
    ,'' 'Issued Cost'
    ,Convert(NVARCHAR(100), (T1.IssuedQty * T2.Price)) AS 'Total Issued Cost'
FROM OWOR T0
LEFT JOIN WOR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
INNER JOIN IGE1 T2 ON T2.BaseEntry = T1.DocEntry
    AND T2.BaseType = '202'
    AND T1.ItemCode = T2.ItemCode

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Изменение поля для включения SUM (DISCINCT () Пример: работает преобразование (Nvarchar (100), SUM (DISTINCT (T1.IssuedQty * T2.Price))).

0 голосов
/ 20 февраля 2020

Вы изменили внутреннее соединение на OWOR на левое соединение во втором запросе, который может увеличивать числа. Кроме того, я не нашел функцию суммы в запросе, поэтому я добавил, что:

SELECT DISTINCT
      CONVERT(nVARCHAR(100),T0.DOCNUM ) AS 'Production Order'
     ,CONVERT(nvarchar(100), ((T1.IssuedQty)*T2.Price)) as 'Issued Cost'
     , '' 'Total Issued Cost'
FROM OWOR T0 
INNER JOIN WOR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
LEFT JOIN IGE1 T2 ON T2.BaseEntry = T1.DocEntry and T2.BaseType = '202' and T1.ItemCode = T2.ItemCode
LEFT JOIN IGN1 T3 on T3.BaseEntry = T0.DocEntry and T3.BaseType = '202'
LEFT JOIN IGN1 T8 on T8.BaseEntry = T0.DocEntry and T3.BaseType = '202' and T8.ItemCode = T0.ItemCode
LEFT JOIN ORSC T4 on T1.Itemcode = T4.ResCode
FULL OUTER Join 
    (Select ITT1.Code 'BOMCODE', ITT1.Father 'BomFather', ITT1.VisOrder,ITT1.Quantity 
     from ITT1  ) ITT1 on T0.Itemcode = ITT1.BomFather and T1.Linenum = ITT1.VisOrder

Union All

SELECT 
    T0.DocNum 'Production Order'
    ,'' 'Issued Cost'
    , Convert(Nvarchar(100), SUM(T1.IssuedQty*T2.Price))) as 'Total Issued Cost'
FROM OWOR T0 
inner JOIN WOR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
inner JOIN IGE1 T2 ON T2.BaseEntry = T1.DocEntry and T2.BaseType = '202' and T1.ItemCode = T2.ItemCode
Group by T0.DocNum

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...