繁体   English   中英

如何在sql查询中添加表底部的行?

[英]How to add row at the bottom of table in sql query?

我有选择查询,我想添加表格的行底部,其中包含借方和贷方列的总和。

我的SQL查询如下:

SELECT * 
FROM 
    (SELECT 
        so.OrderDate ,'Sales' As VoucherType,'' AS VoucherNo,
        a.Total As Debit, NULL As Credit 
    FROM SalesOrder so 
    INNER JOIN
       (SELECT 
           SalesOrderId, SUM(SubTotal) AS Total 
        FROM SalesOrderDetails 
        GROUP BY SalesOrderId) AS a ON so.SalesOrderId = a.SalesOrderId

        UNION ALL

        SELECT  
           v.VoucherDate As OrderDate, 'Receipt' AS VoucherType,
           v.VoucherNumber AS VoucherNo, NULL AS Debit,
           v.Amount AS Credit 
        FROM Vouchers v) AS ledger 
ORDER BY 
     OrderDate ASC

我的查询输出在下面的图像中。

在这里,我附上了查询结果的图像,我希望添加表格的行尾。它行包含借方和贷方的总和。

您可以使用grouping sets执行此操作。 首先,将查询重新排列为聚合查询。 聚合不做任何事情,但总数需要它们。

然后使用group by grouping sets ()来定义各个组:

SELECT OrderDate, VoucherType, VoucherNo, sum(Debit) as Debit, sum(Credit) as Credit
FROM (SELECT so.OrderDate ,'Sales' As VoucherType, '' AS VoucherNo,
             a.Total As Debit, NULL As Credit
      from SalesOrder so inner join
           (SELECT SalesOrderId,sum(SubTotal) AS Total
            FROM SalesOrderDetails 
            group by SalesOrderId)as a on so.SalesOrderId = a.SalesOrderId
            UNION ALL
            SELECT v.VoucherDate As OrderDate, 'Receipt' AS VoucherType,
                   v.VoucherNumber AS VoucherNo,NULL AS Debit ,
                   v.Amount AS Credit from Vouchers v
           ) ledger
GROUP BY GROUPING SETS ((OrderDate, VoucherType, VoucherNo), ())
ORDER BY OrderDate ASC

暂无
暂无

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

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