sql-server-2012 - 如何根据 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]
但这给了我一个非常糟糕的结果。
解决方案
您应该仅按源和属性进行聚合:
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;
注意:此答案假定每个源/属性组最多有两个记录的交易价值。如果没有,上述答案将不得不更改,您应该显示实际数据。
推荐阅读
- objective-c - 如何在 Objective-c 中格式化日期 12/2/31 H、2:21:41 AM?
- php - 数据库未删除,它只是继续复制插入查询,而第二次单击它应该删除该值
- bash - 如何使用 bash 脚本运行屏幕
- c# - 检测 Excel 单元格上的多行
- hadoop - Hive 查询在 Tez 引擎中失败,但在 MR 模式下运行
- r - 如何将字符作为R中函数的参数传递?
- java - 当您在该循环中使用方法时,是否可以在 java 中跳过迭代?
- git - 为什么 git commit 会因 sed 错误而失败?
- python-3.x - 在 Pandas 中将 6 位日期格式转换为标准格式
- tensorflow - 解释 ssd_resnet50 对象检测模型的 .tflite 文件时出错