繁体   English   中英

将行添加到SQL查询结果中,并包含某些列的总数

[英]Add row to SQL query results with totals of certain columns

我有一个SQL查询

select * from orderTable

返回:

在此处输入图片说明

我想让查询返回具有orderId ='Total'的其他行,以及GrossAmt,Payments,NetAmt的总和,其余字段为空,如下所示:

在此处输入图片说明

我试过的

select isnull(OrderId, 'Total') as OrderId, GrossAmt
from    (
        select OrderId, SUM(GrossAmt) as GrossAmt
        from orderTable
        group by OrderId with rollup
    ) as OT

它将返回具有Total和GrossAmt的总和的最后一行,但是当我尝试添加时,请说出StoreId,例如:

select isnull(OrderId, 'Total') as OrderId, GrossAmt, StoreId
    from    (
            select OrderId, SUM(GrossAmt) as GrossAmt, StoreId
            from orderTable
            group by OrderId, StoreId with rollup
        ) as OT

然后,我得到的结果是每行重复的结果的两倍,但StoreId为空值。

我只是想在上面的查询中切换OrderId和StoreId的位置,这给了我最接近的结果。 我正好有我想要的东西,底部只有2行,其中一个行的StoreId为空。

您可以使用UNION使其成为单个表:

     select * from
        (
        select cast(OrderId as Varchar) as OrderId, Custname, GrossAmt, Payments, NetAmt, StoreId, StaffName
        from orderTable
        UNION
        (select 'Total' as OrderId, Null as Custname, 
            Sum(GrossAmt) As GrossAmt, 
            Sum(Payments) As Payments, 
            Sum(NetAmt) As NetAmt, Null as StoreId, Null as StaffName
        from orderTable) 
        ) a

请注意,强制转换在OrderId列中包含单词Total fit

SELECT  ISNULL(OrderId, 'Total') as OrderId, GrossAmt, NULL AS storeId
FROM    (
        SELECT  OrderId, SUM(GrossAmt) as GrossAmt
        FROM    orderTable
        GROUP BY
                OrderId WITH ROLLUP
        ) AS OT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM