使用case语句

时间:2016-03-22 23:17:40

标签: tsql reporting-services

我的查询当前填充的报告中有几行“重复”信息。正在传递的类似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?

2 个答案:

答案 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