SQL Server 2008 CASE语句提供无效的列错误

时间:2016-06-18 08:53:37

标签: sql sql-server sql-server-2008

作为更大的SQL查询的一部分,我正在创建一个临时表来存储来自另一个(临时)表的相关项。 select语句的insert部分使用CASE语句根据labSample列的值使用1或0填充最终列(dataSource)。 SSMS会针对dataSource列中的labSample引用返回无效列错误。我不能为我的生活解决为什么会发生这种错误 - 这是语法错误还是我错过了什么?

下面使用的命名约定是列名称前面的下划线是#related表中的新列,而没有下划线的列名称来自#temp_trace表(dataSource除外)仅labSample表中的#related列。

我真的很感激这一点的帮助!

create table #related (_tr_id int, _mp_id int, _sta_id int, _tr_number_s nvarchar(20),
    _tr_tstamp_ts datetime, _tr_team_s nvarchar(100), _tr_comment_s nvarchar(512),
    _kld_id_medium int, _kld_id_reason int, _kld_id_typeofsmpl int, _sp_id int, 
    _sa_id int, _sa_depth_fl float, _fr_number_l int, dataSource nvarchar(128), labSample bit)

insert into #related (_tr_id, _mp_id, _sta_id, _tr_number_s,
    _tr_tstamp_ts, _tr_team_s, _tr_comment_s,
    _kld_id_medium, _kld_id_reason, _kld_id_typeofsmpl, _sp_id, _sa_id, _sa_depth_fl,
    _fr_number_l, dataSource, labSample)
select
    tt.tr_id as _tr_id,
    tt.mp_id as _mp_id,
    tt.sta_id as _sta_id,
    tt.tr_number_s as _tr_number_s,
    tt.tr_tstamp_ts as _tr_tstamp_ts,
    tt.tr_team_s as _tr_team_s,
    tt.tr_comment_s as _tr_comment_s,
    tt.kld_id_medium as _kld_id_medium,
    tt.kld_id_reason as _kld_id_reason,
    tt.kld_id_typeofsmpl as _kld_id_typeofsmpl,
    sp.sp_id as _sp_id,
    sa.sa_id as _sa_id,
    sa.sa_depth_fl as _sa_depth_fl,
    fr.fr_number_l as _fr_number_l,
    kd.kld_value_s as dataSource,
    case dataSource
        when 'Field' then 0
        when 'Unknown' then 0
        else 1
    end
from #temp_trace tt
    inner join spot sp on sp.tr_id = tt.tr_id
    inner join sample sa on sa.sp_id = sp.sp_id
    inner join fraction fr on fr.sa_id = sa.sa_id
    inner join kld_data kd on kd.kld_id = fr.kld_id_datasource
where mp_id = @tr_mp_id and
    sta_id = @tr_sta_id and
    CAST(tr_tstamp_ts as DATE) = CAST(@tr_tstamp_ts as DATE)

2 个答案:

答案 0 :(得分:2)

据我了解,dataSource不是任何联接表中的列名。它实际上是kd.kld_value_s的别名。你需要改变你的情况,如下所示:

case kd.kld_value_s
    when 'Field' then 0
    when 'Unknown' then 0
    else 1
end

答案 1 :(得分:0)

尝试下载。它可能会帮助你

 CASE WHEN kd.kld_value_s = 'Field' THEN 0
      WHEN kd.kld_value_s = 'Unknown' THEN 0
      ELSE 1
 END AS dataSource