如何根据ID合并行并求和特定字段

问题描述 投票:0回答:1

我正在尝试合并具有相似标识的行。我的桌子看起来像这样:

Table

如果值是同一来源的另一行中的'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
1个回答
0
投票

您应该仅按来源和属性进行汇总:

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;

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

© www.soinside.com 2019 - 2024. All rights reserved.