我最近发现SSRS正在做一个奇怪的聚合,我真的不明白为什么。在构建的此报告中,与构建的其他SQL查询一样,我倾向于从初始查询中获取初步结果,将其放入临时表中,然后执行另一个查询并在该临时表上联接到得到我需要显示的“最终”结果。这是一个示例:
-1。该查询根据日期(必须是一个月的最后一天)获取所有可用的行
SELECT DISTINCT Salesperson,c.Cust_Alias,cost,eomonth(CreateDate) createdate,FaxNumber
INTO #equip
FROM PDICompany_2049_01.dbo.Customers c
JOIN PDICompany_2049_01.dbo.Customer_Locations cl ON c.Cust_Key = cl.CustLoc_Cust_Key
JOIN ricocustom..Equipment_OLD e ON e.FaxNumber = c.Cust_ID + '/' + cl.CustLoc_ID
JOIN PDICompany_2049_01.dbo.Charges ch ON ch.Chg_CustLoc_Key = cl.CustLoc_Key
WHERE Salesperson = @Salesperson
AND ch.Chg_Balance = 0
-2。该查询获取第一个结果集,但进一步过滤以匹配日期变量
SELECT DISTINCT (cost) EquipCost,Salesperson,DATEPART(YEAR,CreateDate) YEAR,DATEPART(MONTH,CreateDate) MONTH,Cust_Alias,FaxNumber
INTO #equipcost
FROM #equip
WHERE Salesperson = @Salesperson
AND DATEPART(MONTH,CreateDate) = DATEPART(MONTH,@Start)
AND DATEPART(year,CreateDate) = DATEPART(year,@Start)
ORDER BY Cust_Alias
-3。最后,将EquipCost的总和与其他KPI的总和放入我的最终结果集中
SELECT sum(EquipCost) EquipCost,YEAR,MONTH,Cust_Alias
INTO #temp_equipcost
FROM #equipcost
GROUP BY Salesperson,year,month,Cust_Alias
现在我知道我可以很容易地将其减少到2个查询,而不是事后3个(并且我将结果放入单个查询中)。但这就是我在寻找答案的地方。在我的GUI报告中,有一行显示的等价成本为180,但我的查询显示为60。直到我将查询更改为单次迭代(而不是3)后,如果仍然得到60的相同结果,它现在在我的GUI报告中显示60。
我实际上也发生在另一个查询中,在该查询中我有2个临时表结果集,但是当我将其压缩为一个时,我的GUI报告按预期工作。
关于为什么使用多个临时表会通过SQL报表生成器中的GUI报表影响我的结果的任何想法(不使用VB HERE!),但是我在SSMS中进行的SQL查询按预期工作?而且要明确一点,只有对查询进行描述并浓缩它才能得到我的结果,Report Builder中的GUI报表非常基础,因此对于分组,表达式等没什么疯狂的。