【问题标题】:How to calculate the sum of various columns in a left join?如何计算左连接中各列的总和?
【发布时间】:2015-10-22 20:00:38
【问题描述】:

在 SSRS Report Builder 3.0 中,我有两个表格,一个是产品列表(有利润),另一个是产品已售附加组件的列表(有各自的利润)。

我正在制作一份报告以显示每件售出的产品、商品的利润、每个附加产品的利润和总利润。

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

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

我的表看起来像这样(请注意,我事先不知道额外的 Adds 将被调用什么或可能有多少个):

发生的情况是,如果一个产品有两个附加组件,那么它会使用总利润的两倍。在上面的截图中,第一列的总数应该是108.33 + 843.75= 952.08,但它是第二次添加843.75并显示1795.83

总数的框只是使用

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

谁能帮助解释为什么会发生这种情况以及如何正确计算?

【问题讨论】:

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


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 我同意正在发生的事情,但我认为我不能使用您的解决方案。这些产品理论上可以有无限数量的添加,并且会因供应商而异,因此我没有可以以这种方式使用的可靠列表。此外,我获取的信息不仅仅是产品和利润。
    • 枢轴在这种情况下不起作用。我最终得到了一个不断变化的列列表,需要显示并且无法选择它们,因为我不知道提前的名称。此外,我需要更多关于每种产品的信息,而不仅仅是名称和总利润。
    【解决方案2】:

    我最终做的(至少在我找到更好的解决方案之前)是只查询交易 ID 的产品并从中创建一个参数。在表中,我使用该参数执行 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/

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2020-05-10
      • 2021-08-30
      • 2016-08-25
      • 2013-12-05
      • 2018-12-03
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多