试图总结不同的值SQL

kyl*_*_13 8 sql reporting-services distinct-values

我在为SSRS中的单元格提供值时遇到问题,该值应该是不同值的总和.我有一个类似于以下屏幕截图的SSRS报告:

在此输入图像描述

我无法获得红色值(11.25美元).我基本上需要根据不同的跟踪#来总结船舶成本.所以有两个不同的跟踪#,一个是5.25美元的船舶成本,另一个是6.00美元,所以红色显示的总数应该是11.25美元.但我无法在SSRS中实现这一点,也无法在SQL查询中找到它.

我在想一个子查询(我知道下面的代码不是有效的SQL):

(SELECT SUM([Ship Cost]) WHERE [Tracking #] IS DISTINCT) AS [Ship Cost]
Run Code Online (Sandbox Code Playgroud)

但我不知道如何写它.

Dec*_*n_K 15

首先获取不同的列表...

SELECT SUM(SQ.COST)
FROM
(SELECT DISTINCT [Tracking #] as TRACK,[Ship Cost] as COST FROM YourTable) SQ
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 7

您可以执行以下操作:

SELECT SUM(distinct [Ship Cost]) . . .
Run Code Online (Sandbox Code Playgroud)

但是,我不推荐这个.您可以有两个具有相同成本的项目,只计算一个.

更好的方法是Tracking #使用以下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
Run Code Online (Sandbox Code Playgroud)

  • @GordonLinoff @DavidFaivre 我实际上认为这应该是公认的答案。我看到的主要优点是它完全独立于查询的其余部分。也就是说,@Declan_K 的解决方案需要将“DISTINCT”添加到整个子查询中,以便它只为每个跟踪号返回一条记录,但如果您想要包含来自会产生重复行的联接表的数据,则这是不可行的。该解决方案允许原始查询结构保持完整。+1 (2认同)