我目前有一个视图(具有大而复杂的连接结构),它将大量数据存入报告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?我觉得我在一个奇怪的中间,没有解决方案的作用......
答案 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(或省略列等)是正确的做法。如果没有,那么一旦它“正常工作”,就要找出他们期望看到的东西。然后应用适当的聚合。