【问题标题】:Getting error: An item with the same key has already been added - error/warning in SSRS report出现错误:已添加具有相同密钥的项目 - SSRS 报告中的错误/警告
【发布时间】:2016-11-11 05:59:08
【问题描述】:

我尝试了很多来研究这个问题。最终归结为导致此“已添加具有相同密钥的项目。”,我相信相同的密钥已经存在,例如 a.field01 和 b.field02。

这里是代码

ALTER PROCEDURE [dbo].[Payroll_Report]

        @Office NVARCHAR(4000),
        @Servicetype NVARCHAR(4000),
        @Start DATETIME,
        @End DATETIME
AS
BEGIN
    SET NOCOUNT ON;

    Select 
    a.owneridname
   ,a.[serviceidname] 
   ,count(case
            when 
                a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
            then
                a.serviceid
           end) As 'Total# Confirmed Activities'

    ,CONVERT( NVARCHAR( 16 ), 
            FLOOR( ( sum(case
            when
                a.serviceidname not like 'Indirect' and a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
            then    
                a.[scheduleddurationminutes]
            end) ) / 60.0 ) ) 
            + N':' + CONVERT( NVARCHAR( 5 ), CONVERT( INTEGER, 
            FLOOR( (sum(case
            when
                a.serviceidname not like 'Indirect' 
            then    
                a.[scheduleddurationminutes]
            end)) % 60.0 ) )) as 'Total Direct Activites HH:MM'

    ,CONVERT( NVARCHAR( 16 ), 
            FLOOR( ( sum(case
            when
                a.serviceidname  like 'Indirect' and a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
            then    
                a.[scheduleddurationminutes]
            end) ) / 60.0 ) ) 
            + N':' + CONVERT( NVARCHAR( 5 ), CONVERT( INTEGER, 
            FLOOR( (sum(case
            when
                a.serviceidname  like 'Indirect'
            then    
                a.[scheduleddurationminutes]
            end)) % 60.0 ) )) as 'Total Indirect Activites HH:MM'


        ,CONVERT( NVARCHAR( 16 ), 
            FLOOR( ( sum(case
            when
                a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
            then    
                a.[scheduleddurationminutes]
            end) ) / 60.0 ) ) 
            + N':' + CONVERT( NVARCHAR( 5 ), CONVERT( INTEGER, 
            FLOOR( (sum(case
            when
                a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
            then    
                a.[scheduleddurationminutes]
            end)) % 60.0 ) )) as 'Total Direct Activites HH:MM'

        ,Sum(Case 
                when a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved' and a.serviceidname not like 'Indirect'
                then
                    b.new_approvedmileage
                end
            ) as 'Total  Approved Mileage (KMs)'


        ,CONVERT( NVARCHAR( 16 ), 
            FLOOR( ( sum(case
            when
                b.new_expensestatusname like 'Approved'
            then    
                b.new_approvedtravel
            end) ) / 60.0 ) ) 
            + N':' + CONVERT( NVARCHAR( 5 ), CONVERT( INTEGER, 
            FLOOR( (sum(case
            when
                b.new_expensestatusname like 'Approved'
            then    
                b.new_approvedtravel
            end)) % 60.0 ) )) as 'Total Approved Travel Time HH:MM'


        ,count(Case 
                when b.new_expensestatusname like 'Approved' and b.new_expensetypeidname like 'Stipends'
                then
                     b.new_expensetypeidname
                end
            ) As 'Total #Approved Stipends'

from 
    [dbo].[FilteredServiceAppointment] a 
join 
    FilteredSystemUser fu
on a.ownerid = fu.systemuserid
join
    .[dbo].[FilteredNew_expenses] b
on 
    fu.systemuserid = b.new_provider
where 
        a.scheduledstart BETWEEN @Start AND @End 
        AND b.new_serviceactivityid is null
        AND a.siteidname IN (SELECT value FROM dbo.udf_Split(@Office, ','))
        AND a.serviceidname IN (SELECT value FROM dbo.udf_Split(@Servicetype, ',')) 
group by
    a.owneridname
   ,a.[serviceidname] 


END

当我在 SP 上方调用 SSRS 时,所有内容都会加载,除了上面代码中的第 4 列“'Total Direct Activites HH:MM'”。

,CONVERT( NVARCHAR( 16 ), 
        FLOOR( ( sum(case
        when
            a.serviceidname not like 'Indirect' and a.[statuscodename] like 'Confirmed' or a.new_approvalstatusname like 'Approved'
        then    
            a.[scheduleddurationminutes]
        end) ) / 60.0 ) ) 
        + N':' + CONVERT( NVARCHAR( 5 ), CONVERT( INTEGER, 
        FLOOR( (sum(case
        when
            a.serviceidname not like 'Indirect' 
        then    
            a.[scheduleddurationminutes]
        end)) % 60.0 ) )) as 'Total Direct Activites HH:MM'

一旦我取消注释这部分代码,它就会给我“已添加具有相同键的项目”。刷新 SSRS 数据集时出错。

请帮忙。

【问题讨论】:

    标签: sql tsql stored-procedures reporting-services


    【解决方案1】:

    您有 2 列具有完全相同的名称 Total Direct Activites HH:MM。 SSRS 无法处理这个问题。换一个,这样就可以了。

    【讨论】:

    • 天哪,非常感谢。我想我需要检查一下我的眼镜。哈哈。
    • 如果我每次遇到这种情况都能得到一分钱,我会得到一美元 (USD)。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多