首页 > 解决方案 > 如何根据 id 组合行并对特定字段求和

问题描述

我正在尝试组合具有相似标识的行。我的表如下所示:

桌子

如果值来自具有相同来源的另一行,我想填写借方或贷方'0.00',然后执行Debit - Credit计算,如下所示:

+------------+----------+---------+----------+----------+-------+
|Source      | Property | ID      | Debit    | Credit   |Balance|
+------------+----------+---------+----------+----------+-------+
|HOCV1900091 | PROP0003 | 1.01.86 | 16800.00 | 16800.00 | 0.00  |
+------------+----------+---------+----------+----------+-------+    

怎么办?

我做了:

SELECT 
    a.[Date],
    a.[Source],
    a.[Property],
    a.[ID],
    [Debit] = STUFF((SELECT DISTINCT  Debit FROM #ProcSubLegder b WHERE b.Source = a.Source FOR XML PATH('')),1,2,''),
    [Credit] = STUFF((SELECT DISTINCT  Credit FROM #ProcSubLegder b WHERE b.Source = a.Source FOR XML PATH('')),1,2,''),
    a.[Balance]
FROM #ProcSubLegder a
GROUP BY [Date],[Source],[Property],[ID],[Credit],[Balance]

但这给了我一个非常糟糕的结果。

标签: sql-server-2012

解决方案


您应该仅按源和属性进行聚合:

SELECT
    Source,
    Property,
    MAX(CASE WHEN ID LIKE '%[0-9].[0-9]%' THEN ID END) AS ID,
    MAX(Debit) AS Debit,
    MAX(Credit) AS Credit,
    MAX(Credit) - MAX(Debit) AS Balance
FROM #ProcSubLegder
GROUP BY
    Source,
    Property;

注意:此答案假定每个源/属性组最多有两个记录的交易价值。如果没有,上述答案将不得不更改,您应该显示实际数据。


推荐阅读