对多行求和并在下一列中显示总和值

时间:2013-04-17 12:24:29

标签: sql-server sql-server-2008

我喜欢做以下操作:

Sale ID     Q1   Q2              Total           Net Amount
530095243   0    12,600.00       12,600.00       17,657.17 
530095243   0    5,057.00        5,057.00        17,657.17 
530095243   0    (51,857.30)     (51,857.30)     17,657.17 
530095243   0    (51,567.60)     (51,567.60)     17,657.17 
530095243   0    51,567.60       51,567.60       17,657.17 
530095243   0    51,857.47       51,857.47       17,657.17 

净额列的总和是....在我的情况下,我想在最后一行显示总和,如下所示:

Sale ID     Q1   Q2              Total           Net Amount
530095243   0    12,600.00       12,600.00       0
530095243   0    5,057.00        5,057.00        0 
530095243   0    (51,857.30)     (51,857.30)     0 
530095243   0    (51,567.60)     (51,567.60)     0
530095243   0    51,567.60       51,567.60       0 
530095243   0    51,857.47       51,857.47       17,657.17 

2 个答案:

答案 0 :(得分:0)

<强>更新

DECLARE @temp TABLE
(
        Sale_ID BIGINT 
      , Q1 INT              
      , Q2 DECIMAL(10,2)     
      , Total DECIMAL(10,2)
      , Net_Amount DECIMAL(10,2)
)

INSERT INTO @temp (Sale_ID, Q1, Q2, Total, Net_Amount)
VALUES 
    (530095243,   0,    12600.00,   12600.00, 17657.17), 
    (530095243,   0,    5057.00,    5057.00,  17657.17), 
    (530095243,   0,    51857.30,   51857.30, 17657.17), 
    (530095243,   0,    51567.60,   51567.60, 17657.17), 
    (530095243,   0,    51567.60,   51567.60, 17657.17), 
    (530095243,   0,    51857.47,   51857.47, 17657.17),
    (530095244,   0,    12600.00,   12600.00, 17657.17), 
    (530095244,   0,    5057.00,    5057.00,  17657.17), 
    (530095244,   0,    51857.47,   51857.47, 17657.17)  

DECLARE @new_table TABLE
(
        Sale_ID BIGINT 
      , Q1 INT              
      , Q2 DECIMAL(10,2)     
      , Total DECIMAL(10,2)
      , Net_Amount DECIMAL(10,2)
)

;WITH t AS 
(
    SELECT  
          Sale_ID
        , Q1
        , Q2
        , Total
        , Net_Amount
        , RNum = ROW_NUMBER() OVER (PARTITION BY Sale_ID ORDER BY Sale_ID, Q1, Q2, Total, Net_Amount)
    FROM @temp
),
mx AS 
(
    SELECT 
          LRow = MAX(RNum)
        , Sale_ID
    FROM t
    GROUP BY Sale_ID
)
INSERT INTO @new_table (Sale_ID, Q1, Q2, Total, Net_Amount)
SELECT  t.Sale_ID
    ,   t.Q1
    ,   t.Q2
    ,   t.Total
    ,   Net_Amount = CASE WHEN mx.LRow = t.RNum THEN t.Net_Amount ELSE 0 END
FROM t t
JOIN mx ON t.Sale_ID = mx.Sale_ID

SELECT * 
FROM @new_table

答案 1 :(得分:0)

为什么要这样做!我认为这没有任何意义。

我想更新您应该只将原始数据存储到数据库中,任何操作数据都不适合存储,例如总数,百分比,平均数等。

您可以使用存储的原始数据在应用程序端轻松填充此类操作数据。

我想在此请求删除此类操作字段,并使您的记录更加动态。

我希望你明白这一点。

谢谢...!