将varchar值“另一个值”转换为数据类型int时转换失败

时间:2020-04-24 19:38:01

标签: sql sql-server tsql

我正在尝试创建一个select语句,当一个表中的type_id为1时,即为字符串,因此我需要从另一个表中选择value_string,但是当type_id为2时,这是一个整数,因此我需要选择value_int

这是我的查询

select
    ps.link_id, ps.name, sla.store_nbr,
    case
        when ps.type_id = 1 then psd.value_string
        when ps.type_id = 2 then psd.value_int
        when ps.type_id = 6 then psd.value_any
    end
from
    links.project_schema ps
    join links.links l on l.id = ps.link_id
    join links.store_link_assignment sla on sla.links_id = link_id
    join links.project_schema_details psd on psd.project_schema_id = ps.id
where ps.link_id = 100551

我收到上述错误,因为类型是1,所以应该选择psd.value_string,但是如果不是,我想让查询对这个特定的select语句使用value_int,我不确定如何请执行if(ps.type_id == 1),然后选择psd.valuestring(如果为2),然后选择psd.value_int列。

1 个答案:

答案 0 :(得分:1)

一个小技巧是使用concat()返回变量数据类型的字符串值。

select
    ps.link_id, ps.name, sla.store_nbr,
    case
        when ps.type_id = 1 then concat('',psd.value_string)
        when ps.type_id = 2 then concat('',psd.value_int)
        when ps.type_id = 6 then concat('',psd.value_any)
    end
from
    links.project_schema ps
    join links.links l on l.id = ps.link_id
    join links.store_link_assignment sla on sla.links_id = link_id
    join links.project_schema_details psd on psd.project_schema_id = ps.id
where ps.link_id = 100551
相关问题