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

Posted

技术标签:

【中文标题】将行添加到 SQL 查询结果,其中包含某些列的总数【英文标题】:Add row to SQL query results with totals of certain columns 【发布时间】:2015-06-30 22:17:01 【问题描述】:

我有一个 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 为空。

【问题讨论】:

你想在StoreID返回什么? 我只希望它是空的,所以我想是空的。 【参考方案1】:

您可以使用 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 一词

【讨论】:

我得到一个错误“')'附近的语法不正确。在最后一行,看起来缺少一个闭合括号,我假设外部选择所以我添加了一个新的括号, 仍然出现错误。如果我将 * 更改为字段名称,则会出现错误“列名无效”。【参考方案2】:
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

【讨论】:

这将 null 作为所有 storeId,我只希望 Total 行的 storeId 为 null,如果我删除“NULL AS storeId”并使其只是“storeId”,那么我得到的结果与我的相同最后在原始问题中转换,所有行,总共两行,一个带有 storeId,一个带有 null storeId。 射击,不是。我上面的例子与我的实际查询相比有点愚蠢。这可能是我的错误,我试图简化问题。 OrderTable 实际上是从多个表中获取数据的查询结果。我刚刚检查过,两个表都有 OrderId 字段。我本来以为放置 otherTableName.OrderId 会解决问题,但假设在您的查询中替换 OrderId 的每个实例,我会在第一个 OrderId 下得到错误,即“。”在第二个中,在“AS”下。

以上是关于将行添加到 SQL 查询结果,其中包含某些列的总数的主要内容,如果未能解决你的问题,请参考以下文章

将行转换为列的 MS SQL 连接查询

使用 select 将行添加到查询结果

c#将行添加到具有自动增量列的数据表中

分页得到查询总数的方法 mysql

如何显示每周发生并满足某些条件的记录总数 SQL

将行值扩展到单个行