As part of a larger SQL query, I am creating a temporary table to store related items from another (temporary) table. The select
portion of the insert
statement uses a CASE statement to fill the final column ( labSample
) with either a 1 or 0 based on the value of the dataSource
column. SSMS returns an invalid column error for the reference to dataSource
in the labSample
column. I can't for the life of me work out why this error is occurring - is this a syntax error or am I just missing something?
The naming convention used below is an underscore preceding the column name are the new columns in the #related
table, while column names without underscore originate in the #temp_trace
table (except dataSource
and labSample
columns which are only in the #related
table).
I'd really appreciate a bit of help with this one!
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)
As far as I understand, dataSource
is not a column name in any of your joining tables. It actually is an alias of kd.kld_value_s
. You need to change your case like below:
case kd.kld_value_s
when 'Field' then 0
when 'Unknown' then 0
else 1
end
try follwing. it may helps you
CASE WHEN kd.kld_value_s = 'Field' THEN 0
WHEN kd.kld_value_s = 'Unknown' THEN 0
ELSE 1
END AS dataSource
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.