SQL 服务器查询以获取每行的总数

SQL Server query to get the total for each row

我有两个 tables InvoiceLineDiscount:

我需要得到一个结果集,其中包括发票订单项以及折扣 table 中的折扣总额 (SUM),如下所示:

如何仅使用一个查询来实现这一目标?

SELECT
A.InvoiceHeaderID, A.InvoiceLineNo, ProductCode, Price, SUM(DiscountValue) as TotDiscount
FROM
InvoiceLine A, Discount B
WHERE
A.InvoiceHeaderID = B.InvoiceHeaderID
AND A.InvoiceLineNo = B.InvoiceLineNo
GROUP BY
A.InvoiceHeaderID, A.InvoiceLineNo, ProductCode, Price
Order BY
A.InvoiceHeaderID, A.InvoiceLineNo
select
    i.InvoiceHeaderId,
    i.InvoiceLineNo,
    i.ProductCode,
    i.Price,
    [TotDiscount]=isnull(d.TotDiscount)
from
    [InvoiceLine] i
left join
    [Discount] d on i.InvoiceHeaderId=d.InvoiceHeaderId and i.InvoiceLineNo=d.InvoiceLineNo
group by
    i.InvoiceHeaderId,
    i.InvoiceLineNo,
    i.ProductCode,
    i.Price
DECLARE @InvoiceLine TABLE
    (
      InvoiceHeaderID INT ,
      InvoiceLineNo INT ,
      ProductCode VARCHAR(5) ,
      Price MONEY
    );

INSERT  INTO @InvoiceLine
VALUES  ( 1, 1, 'AB001', 1200 ),
        ( 2, 1, 'AC002', 1525 );


DECLARE @Discount TABLE
    (
      InvoiceHeaderID INT ,
      InvoiceLineNo INT ,
      DiscountCategory VARCHAR(10) ,
      discountValue MONEY
    );
INSERT  INTO @Discount
VALUES  ( 1, 1, 'SalesDisc', 120 ),
        ( 1, 1, 'FixedOffer', 100 ),
        ( 2, 1, 'SalesDisc', 152.50 );


SELECT  l.InvoiceHeaderID ,
        l.InvoiceLineNo ,
        l.ProductCode ,
        l.Price ,
        ISNULL(SUM(d.discountValue),0) [TotalDiscount]
FROM    @InvoiceLine l
        LEFT JOIN @Discount d ON d.InvoiceHeaderID = l.InvoiceHeaderID
                                 AND d.InvoiceLineNo = l.InvoiceLineNo
GROUP BY l.InvoiceHeaderID ,
        l.InvoiceLineNo ,
        l.ProductCode ,
        l.Price; 

结果

SELECT
InvoiceLine .InvoiceHeaderID, InvoiceLine .InvoiceLineNo, ProductCode, Price, SUM(DiscountValue) as TotDiscount
FROM
InvoiceLine, Discount 
WHERE
InvoiceLine .InvoiceHeaderID = Discount .InvoiceHeaderID AND A.InvoiceLineNo = Discount .InvoiceLineNo
GROUP BY InvoiceLine .InvoiceHeaderID, InvoiceLine .InvoiceLineNo, ProductCode, Price
Order BY InvoiceLine .InvoiceHeaderID, InvoiceLine .InvoiceLineNo