尝试对不同的SQL值求和

尝试对不同的SQL值求和,sql,reporting-services,distinct-values,Sql,Reporting Services,Distinct Values,我很难为SSRS中的一个单元格计算出一个值,它应该是不同值的总和。我有一份SSRS报告,看起来类似于下面的屏幕截图: 我很难得到红色的价值11.25美元。我基本上需要根据不同的跟踪s计算船舶成本的总和。所以有两个不同的跟踪系统,一个是5.25美元,另一个是6.00美元,所以显示为红色的总数应该是11.25美元。但我无法在SSRS中实现这一点,也无法在SQL查询中找到它 我在考虑一个子查询,比如,我知道下面的SQL是无效的: (SELECT SUM([Ship Cost]) WHERE [Trac

我很难为SSRS中的一个单元格计算出一个值,它应该是不同值的总和。我有一份SSRS报告,看起来类似于下面的屏幕截图:

我很难得到红色的价值11.25美元。我基本上需要根据不同的跟踪s计算船舶成本的总和。所以有两个不同的跟踪系统,一个是5.25美元,另一个是6.00美元,所以显示为红色的总数应该是11.25美元。但我无法在SSRS中实现这一点,也无法在SQL查询中找到它

我在考虑一个子查询,比如,我知道下面的SQL是无效的:

(SELECT SUM([Ship Cost]) WHERE [Tracking #] IS DISTINCT) AS [Ship Cost]

但是我不知道怎么写。你可以做以下几点:

SELECT SUM(distinct [Ship Cost]) . . .
但是,我不建议这样做。你可以有两个相同成本的项目,只有一个会被计算在内

更好的方法是使用row_number函数为每个跟踪选择一个值:

select SUM(case when seqnum = 1 then [Ship Cost] end)
from (select t.*,
             row_number() over (partition by [Order #], [Tracking #]
                                order by (select NULL)
                               ) as seqnum
      . . .
     ) t

首先获取不同的列表

SELECT SUM(SQ.COST)
FROM
(SELECT DISTINCT [Tracking #] as TRACK,[Ship Cost] as COST FROM YourTable) SQ
试试像这样的东西

select sum(shipcost) from (select distinct tracking#, shipcost from table)
干杯

嗨,戈登·林诺夫,你似乎有一个很好的解决办法。我无法让您提供的查询正常工作,但我使用ROW_NUMBER函数做了类似的操作。现在,我的报告中有了一个新的输出。屏幕截图中的红色值是使用SSRS中的以下表达式计算的:=SUMIIFIELDS!RowNumber.Value=1,字段!但是,对于包含1个以上项目的订单,它会给出一个错误。我还是不明白。您知道如何修改表达式以使报告输出正确吗?@kyle_13。我想你应该问另一个问题,提供关于样本数据和预期结果的信息。谢谢@Gordon Linoff,这就是我最终要做的,这里有了解决方案。报告中存在数据转换问题。我想知道与@Declan_K发布的内容相比,该解决方案是否有任何优势。@GordonLinoff@DavidFaivre我认为这应该是公认的答案。我看到的主要优点是它与查询的其余部分相当独立。也就是说,@Declan_K的解决方案需要将DISTINCT添加到整个子查询中,以便它只为每个跟踪编号返回一条记录,但如果您希望包含来自将产生重复行的联接表的数据,则这是不可行的。此解决方案允许原始查询结构保持不变+1.