2015-07-21 23 views
0

我想下面的SQL查询运行报告服务无差错每一列必须有一个独特的名字,当你返回查询

select ca.callingpartynumber, ca.originalcalledpartynumber, case 
when calledpartylastname is not null then ca.calledpartylastname + ',' + calledpartyfirstname 
else p1.name end, 
p1.location, p1.dept, p1.title, 
case 
when callingpartylastname is not null then ca.callingpartylastname + ',' + callingpartyfirstname 
else p3.name end 
from calldata.calldetailreport ca 
join ps_bc_peoplesource_base p1 on ca.originalcalledpartynumber = replace(p1.bc_int_phone, '-', '') 
left outer join ps_bc_peoplesource_base p3 on ca.callingpartynumber = replace(p1.bc_int_phone, '-', '') 
where originalcalledpartynumber in (select replace(bc_int_phone, '-', '') internal_modified from ps_bc_peoplesource_base where bc_lan_id = 'f7c') 
--and datetimedisconnect between @startdate and @enddate --1221 

我得到这个错误 -

“具有相同键的项已被添加。”

+0

因为有这个问题是两列与您选择的名称相同。确保在Management Studio中运行语句时,更改最终名称和每个列都有唯一的名称。如果在两个不同的表中添加两列,并且您将它们添加到Select Clause中,请为每个卷积添加ALIAS名称 – HaveNoDisplayName

+2

您是否尝试给2'case ... end'语句提供明确的别名? 'case ...结尾为'。 – sstan

+0

谢谢!但是现在我得到一个错误,它说:“文本框'finalcalledpartynumber'的值表达式指的是字段'finalcalledpartynumber'。报告项目只能引用当前数据库范围....'这是什么意思?再次感谢所以很多! –

回答

1

你缺少列别名在你的SELECT查询两个case语句。由于SSRS仅使用列名作为键,而不是表+列,所以它会窒息。

Refer HereHereHere also

SELECT ca.callingpartynumber, ca.originalcalledpartynumber, 
    CASE WHEN calledpartylastname IS NOT NULL 
      THEN ca.calledpartylastname + ',' + calledpartyfirstname 
     ELSE p1.name END AS calledpartylastname, 
    p1.location, 
    p1.dept, 
    p1.title, 
    CASE WHEN callingpartylastname IS NOT NULL 
      THEN ca.callingpartylastname + ',' + callingpartyfirstname 
     ELSE p3.name END AS callingpartylastname 
    ... 
    ... 
+0

谢谢! 但是现在我得到一个错误,其中说 - “文本框的值表达式'最终calledpartynumber'是指字段'最终calledpartynumber'。报告项目只能引用当前数据库范围....'这是什么意思? 再次感谢这么多! –

+0

此错误是因为您引用了此'finalcalledpartynumber',但此列在当前范围/数据集/区域中不存在。这个字段不在你上面​​提到的queryso中,这意味着你有另一种查询方式 – HaveNoDisplayName

相关问题