根据存储在另一个字段中的字段名称选择字段值

时间:2016-10-21 13:25:12

标签: sql-server-2008 tsql case

我需要做的是根据另一个字段返回的值计算列:

Supose:

declare @t TABLE (
    code varchar(5), 
    address varchar(20), 
    result_type varchar(1), 
    result varchar(50) 
)

insert into @t values ('0001', '', 'L', 'DFK-2020')
insert into @t values ('0001', '', 'F', 'code')
insert into @t values ('0001', '214, Samuel St', 'F', 'address')

我需要的是返回的选择语句:

DFK-2020
0001
214, Samuel St.

我唯一能想到的是:

select 
case 
    when result_type = 'L' then result
    when result_type = 'F' then (result) -- -> ????? 
end as ret_values

我迷失了????。 我必须根据存储在另一个字段中的内容选择一个字段

类似于:“当'result_type'为'F'时,请选择存储在名称存储在'结果'中的字段中的值”

在其他语言/场景中我曾经用“宏引用”来实现这一点。类似的东西:

select &(result) from ...

如何在sql server 2008中实现这一目标?

3 个答案:

答案 0 :(得分:1)

一种方式:

select *,
    case result_type
        when 'L' then result
        when 'F' then
            case result 
                when 'code' then code
                when 'address' then address
            end
        end
from @t

答案 1 :(得分:0)

你可以使用一些子选择,注意这不是性能最好的,所以如果你有大量的数据,它会很重。

类似的东西:

select 
   (select result from t where result_type = 'L') as fieldName1,
   (select result from t where result_type = 'F') as fieldName2,
   .
   .
   .

答案 2 :(得分:0)

SELECT
    CASE result_type
        WHEN 'L' THEN result
        WHEN 'F' THEN 
            CASE result
                WHEN 'code' THEN code
                WHEN 'address' THEN address
                -- and so on
            END
    END AS ret_values