SSRS在数据集中的单个列上选择“不同”

时间:2014-02-03 20:14:11

标签: mysql sql sql-server reporting-services

我目前有一个视图(具有大而复杂的连接结构),它将大量数据存入报告SSRS。现在,对于某些报告,每个记录都有一个重复的行,它会流向报告,使其无效。我注意到这对于某些报告而言并不是所有这些都真的令我难以理解,因为如果基本查询中有错误它们都应该有重复的错误..无论如何我试图在基本视图中查找为什么但是不能什么都搞不清楚。

我注意到的一件事是结果集的每一行中唯一唯一的东西是名为“Position_Number”的列。因此,在数据集属性中,我认为仅在列上放置DISTINCT很容易发现不可能。我尝试了很多查询,但似乎都没有。

  • 行号似乎不起作用,因为数据集属性

    不支持
      row_number() over (partition by field1 order by field2)
    
  • GROUP BY不起作用

我尝试过来自各地的一堆查询:

 SELECT * FROM
vw_InvoiceOilPhyInspectionFees AS G1
JOIN (SELECT  findetail_position, max(vw_invoice_invoicedate) as mostrecent 
     FROM  view_Fees group by  findetail_position) AS G2
 ON G2. findetail_position = G1. findetail_position and g2.mostrecent = g1.vw_invoice_invoicedate
ORDER BY G1. findetail_position

TL:DR:我真正要问的是......无论如何,从SSRS报告的结尾到基本上都有一个结果集列上的SELECT DISTINCT?我觉得我在一个奇怪的中间,没有解决方案的作用......

1 个答案:

答案 0 :(得分:1)

当您获得重复行时,可以通过执行DISTINCT或使用GROUP BY来抑制它们。在您的情况下,GROUP BY是要走的路。技术:GROUP BY重复的列,并在看似唯一且导致重复行的列上使用Max()(或equiv)。

例如,对于这样的数据:

First   Last        City  Zone
-----  ------  ---------- ----
Joe,   Smith,  Cleveland,   1
Bill,Johnson,    Atlanta,   6
Mike,  Truax,   St.Louis,   1  <-- is this the dupe?
Mike,  Truax,   St.Louis,   2  <-- or is it this one?
Eric,  Jones,   Brussels,   4

使用如下查询:

SELECT First, Last, City, Max(Zone) AS Zone
FROM thatTable
GROUP BY First, Last, City

产生相同的结果,没有重复的行

First   Last        City  Zone
-----  ------  ---------- ----
Joe,   Smith,  Cleveland,   1
Bill,Johnson,    Atlanta,   6
Mike,  Truax,   St.Louis,   2  <-- after applying a Max() aggregate
Eric,  Jones,   Brussels,   4

当然,我应该很明显地过度简化了这一点。具体来说,我不希望你得到任何列上的Max()始终会给你你想要的东西的印象。不,先生!它只是一种压制重复行的唯一列的方法。在某些情况下做这件事可能完全是错误的。

因此,请与您的用户核实并确认Max或Min(或省略列等)是正确的做法。如果没有,那么一旦它“正常工作”,就要找出他们期望看到的东西。然后应用适当的聚合。