SSRS:为什么我要进行此汇总?

我最近发现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报表非常基础,因此对于分组,表达式等没什么疯狂的。

caowei5323013 回答:SSRS:为什么我要进行此汇总?

我的最佳猜测是,您偶然遇到了一种情况,即您没有正确清除临时表(或者您多次填充了临时表)。作为临时表的替代方法,您可以改用表变量。同样,您可以使用生产表中的单个查询-如果要让它像3个单独的查询一样“感觉”,请使用CTE。

本文链接:https://www.f2er.com/3141367.html

大家都在问