如何计算左连接中各列的总和?

时间:2015-10-22 20:00:39

标签: sql reporting-services reportbuilder3.0 reporting-services-2012

在SSRS Report Builder 3.0中,我有两个表,一个是产品列表(有利润),另一个是产品的已售出附件列表(带有个人利润)。

我正在制作一份报告,显示每件产品的销售情况,项目的利润,每次增加的利润以及总利润。

我正在使用此查询导入数据(为简单起见,省略了其他字段):

SELECT  
  Products.DealID AS DealID  
  ,Profit  
  ,AddonTypeType  
  ,AddOnProfit  
FROM  
  Products  
  LEFT OUTER JOIN productAddOns  
    ON Products.DealID = productAddOns.DealID

我的表格看起来像这样(请注意,我事先并不知道将调用额外的附加内容或可能有多少附加内容):

Current Table

正在发生的事情是,如果一个产品有两个附加组件,那么它总共使用两次利润。在上面的屏幕截图中,第一列总计应为108.33 + 843.75= 952.08,但它会在843.75中再次添加并显示1795.83

总计的框只是使用

=Sum(CDbl(Fields!Profit.Value)) 

任何人都可以帮助解释为什么会发生这种情况以及如何正确计算吗?

2 个答案:

答案 0 :(得分:0)

修饰: 以下是动态查询的示例,该查询可以容纳灵活数量的产品插件,并且不需要任何硬编码。

DECLARE @dynamicSqlPivot AS NVARCHAR(MAX)

DECLARE @columnName AS NVARCHAR(MAX)

SELECT @columnName = ISNULL(@columnName + ',',' ')
    + QUOTENAME(addonTypeType) 
    FROM (SELECT DISTINCT addonTypeType FROM Productaddons) AS prodadds



SET @dynamicSqlPivot = 
N'SELECT * 
FROM (
SELECT 

   P.DealID AS dealID
  ,p.Profit 
  ,a.AddonTypeType
  ,a.AddonProfit


FROM  
  Products p
  LEFT OUTER JOIN Productaddons a  
    ON P.dealID = A.DealID
    ) AS s


PIVOT (
SUM(s.addonProfit) 
FOR s.addonTypeType IN (' + @columnName + ')) AS pvttable'

EXEC (@dynamicsqlpivot)

答案 1 :(得分:0)

我最终做的事情(至少在我找到更好的解决方案之前)是仅仅针对dealID查询产品并从中创建参数。在表中,我使用该参数执行MultiLookup和自定义代码以添加MultiLookup对象中的所有项。

=Code.SumLookup( MultiLookup( Parameters!DealNumbers.value, Fields!DealID.Value, Fields!FrontEndGross.Value, "CompleteDeals" ) )

此处找到了求和的示例:http://salvoz.com/blog/2013/05/27/sum-result-of-ssrs-lookupset-function/