如何使用sql查询仅选择客户数据和表底部的客户数据之和作为行?

如何使用sql查询仅选择客户数据和表底部的客户数据之和作为行?,sql,sql-server,Sql,Sql Server,我有sql查询。 这个查询为我提供了大量的客户记录、凭证和订单小计,但我希望在表的底部位置显示借方和贷方行的总和以及贷方和借方列的总和 因此,请指导我如何使用by查询实现此表 这是我的sql查询 declare @Credit decimal(18,2) declare @Debit decimal(18,2) select @debit= SUM(sd.SubTotal) from SalesOrderDetails sd left join SalesOrder so on

我有sql查询。 这个查询为我提供了大量的客户记录、凭证和订单小计,但我希望在表的底部位置显示借方和贷方行的总和以及贷方和借方列的总和

因此,请指导我如何使用by查询实现此表

这是我的sql查询

declare @Credit decimal(18,2)
declare @Debit decimal(18,2) 

select @debit= SUM(sd.SubTotal) 
from SalesOrderDetails sd 
left join SalesOrder so 
    on sd.SalesOrderId = so.SalesOrderId 

select @credit = SUM(Amount) from Vouchers 

SELECT CustomerId,
    OrderDate, 
    VoucherType, 
    VoucherNo, 
    SUM(Debit) as Debit, 
    SUM(Credit) as Credit
FROM (SELECT so.CustomerId, 
            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.CustomerId
               ,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 ((CustomerId),(OrderDate, VoucherType, VoucherNo), ())
我已附上我的输出图像。


在我的图像中,我得到了这个结果,但这是一个非常混乱的过程,所以请给我一个适当的解决方案。

添加一个HAVING子句,它发生在分组和聚合之后

....
GROUP BY GROUPING SETS ((CustomerId),(OrderDate, VoucherType, VoucherNo), ())
HAVING VoucherType Is Null

我知道这是可能的。如果有任何其他方法可以写短查询并获取快速数据。是的,这是可能的。我需要一个更好的解释,你想实现什么?没有凭证类型的行是什么?我需要客户id和借方和贷方的合计,以及。表最后一行显示所有客户的借方和贷方合计。请显示实际执行计划和成本。如果您确定了成本最高的项目,这将很有帮助。可能是缺少索引导致了您的延迟。如果您有任何想法,请告诉我如何实现。如果您自己编写了此查询,那么我认为您有足够的能力实现您想要的。我已从internet帮助中编写了此查询。但是我需要其他简短的查询,我可以实现这个输出。