Получение записей из одной таблицы и отличие от той же таблицы дает нерегулярный вывод

Мне нужна сумма из этих двух таблиц, но я получаю по отдельности -

SELECT 
    GrandTotal - RecPayAmount - 
       (
       select 
            sum(detail.LineAmount) 
       From 
            TranPOSDetail as detail 
       where 
            detail.RefHeaderCode = TranPOSHeader.Code 
       and 
            EntryFlag = 4
       ) 
from TranPOSHeader 
where 
     VoucherTypeCode=2000 
And 
     WalkInCustomerCode=200429 
And 
     GrandTotal > RecPayAmount 

Мой результат похож на

1) 10

2) 20

Но я хочу это как -

1) 30

Как я могу изменить этот запрос, чтобы он отражал желаемые результаты?

2
0
65
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Не меняя существующий запрос, вы можете попробовать следующее.

SELECT SUM(T.S) AS Total FROM
(
    SELECT 
        (GrandTotal - RecPayAmount - 
           (
           select 
                sum(detail.LineAmount) 
           From 
                TranPOSDetail as detail 
           where 
                detail.RefHeaderCode = TranPOSHeader.Code 
           and 
                EntryFlag = 4
           ) 
         ) AS S
    from TranPOSHeader 
    where 
         VoucherTypeCode=2000 
    And 
         WalkInCustomerCode=200429 
    And 
         GrandTotal > RecPayAmount 
) T

Да, я ... но он говорит мне принять ответ через 2 минуты ... я приму, не волнуйтесь.

Krunal Shah 11.04.2018 13:23

Используйте Cte и агрегированные итоговые значения

 WITH Amount
    AS (
        SELECT GrandTotal - RecPayAmount - (
                SELECT sum(detail.LineAmount)
                FROM TranPOSDetail AS detail
                WHERE detail.RefHeaderCode = TranPOSHeader.Code
                    AND EntryFlag = 4
                ) TotalAmount
        FROM TranPOSHeader
        WHERE VoucherTypeCode = 2000
            AND WalkInCustomerCode = 200429
            AND GrandTotal > RecPayAmount
        )
    SELECT Sum(TotalAmount)
    FROM Amount

да, это работает ... спасибо за ваше время .. вы можете проголосовать за мой пост?

Krunal Shah 11.04.2018 13:34

Вот один более простой подход

SELECT Sum(GrandTotal - RecPayAmount - oa.Total_LineAmount)
FROM   TranPOSHeader th
       OUTER APPLY (SELECT Sum(d.LineAmount)
                    FROM   TranPOSDetail AS d
                    WHERE  d.RefHeaderCode = th.Code
                           AND d.EntryFlag = 4) oa (Total_LineAmount)
WHERE  VoucherTypeCode = 2000
       AND WalkInCustomerCode = 200429
       AND GrandTotal > RecPayAmount 

да, это работает ... спасибо за ваше время .. вы можете проголосовать за мой пост?

Krunal Shah 11.04.2018 13:36

Другие вопросы по теме