我的查询当前填充的报告中有几行“重复”信息。正在传递的类似ID应该合并但是足够独特,我们不希望在我们的模型中Concat
/ Insert
。为了正确处理报告,我需要将它们的$值相加(我实际需要保留的唯一信息是名称,最终的Summed金额和ID。
有没有一种简单的方法可以通过创建一个case语句来实现这一点,它只会将Amount
字段加起来?我尝试使用SUM(CASE WHEN
语句但我不想要新列,因为我的报告仅使用该字段来填充$$信息。以下是我的问题示例:
ID Name Amount Person
+-------+--------------+------------+-----------------------+
21011 Place A -210.30 John Doe
210115 Place A-a 6500.70 John Doe
21060 Place B 255.00 Wayne C
2106015 Place Bb 212.30 Wayne C
2106015 Place Bb 1212.30 Wayne C
2106015 Place Bb 212.30 Wayne C
21080 Place J 57212.30 Billy J
我想要的结果是:
ID Name Amount Person
+-------+--------------+------------+-----------------------+
21011 Place A 6290.40 John Doe
21060 Place B 1889.90 Wayne C
21080 Place J 57212.30 Billy J
是否有一种简化的方法可以在TSQL中组合这些行而无需修改db?
答案 0 :(得分:0)
您可以尝试此操作(假设您的ID
列是数字而不是字符字段):
;WITH cte_getsum AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY Person ORDER BY ID) AS RowNum,
ID,
NAME,
(SELECT SUM(Amount) FROM TableName WHERE TableName.Person = t1.Person) AS SumAmount,
Person
FROM
TableName t1
)
SELECT * FROM cte_getsum
WHERE rownum = 1
答案 1 :(得分:0)
您可以尝试使用以下脚本,我为示例数据创建了一个临时表..但在您的情况下,您可以直接引用您拥有的表。
SELECT * INTO #tmpInput
FROM (VALUES('21011','Place A', -210.30,'John Doe'),
('210115','Place A-a',6500.70,'John Doe'),
('21060', 'Place B' ,255.00,'Wayne C'),
('2106015', 'Place Bb' ,212.30,'Wayne C'),
('2106015' , 'Place Bb' ,1212.30,'Wayne C'),
('2106015' , 'Place Bb' ,212.30 ,'Wayne C')
,('21080' , 'Place J' ,57212.30,'Billy J')
)Input (ID,Name,Amount,Person)
SELECT SUBSTRING(t1.ID,0,6) ID
,t2.Name
,SUM(t1.Amount) AMOUNT
,t2.Person
FROM #tmpInput t1
INNER JOIN #tmpInput t2 ON t2.ID=SUBSTRING(t1.ID,0,6)
GROUP BY SUBSTRING(t1.ID,0,6),t2.Name,t2.Person