2016-10-21 15 views
1

は、別のフィールドで返される値に基づいて算出されたコラムです:選択フィールドの値は、私が行うために必要なもの

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』である場合には、名前が 『結果』に格納されたフィールドに格納されている値を選択してください」どのように私は、SQL Serverの2008年にそれを達成することができます

select &(result) from ... 

:私は同じよう.somethingを「マクロ参照」でこれを達成するために使用される他の言語/シナリオで

+0

あなたは、単一のデータ・タイプを持っているすべてのデータを得ることを計画するにはどうすればよいですか?単一の列のデータ型は、行ごとに異なることはできません。 fyi:動的SQLを使用する予定の場合は、[SQL Injection](http://bobby-tables.com/)を参照してください。 – HABO

答えて

0

一部のサブセレクトを使用することができますが、これはパフォーマンス上最も良いことではないことに注意してください。データが大量の場合は重くなります。このような

何か:

select 
    (select result from t where result_type = 'L') as fieldName1, 
    (select result from t where result_type = 'F') as fieldName2, 
    . 
    . 
    . 
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 
+0

問題はテーブルに150個のフィールドがあります... – user3770963

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 
+0

問題はテーブルに150個以上のフィールドがあります – user3770963

+0

@ user3770963それから150個のWHEN ...の部分を書かなければなりません。それ以外の方法はありません。 –

+0

@ user3770963しかし、テーブル定義を調べ、その結果に基づいて動的クエリを作成することで、これを動的クエリにすることができます。テーブルの列名を取得する方法については、[here](http://stackoverflow.com/a/1054988/243373)を参照してください。動的クエリを作成するには、 'NVARCHAR(MAX)'(例えば@query)でクエリを構築し、['EXEC sp_executesql @ sql'](https://msdn.microsoft.com/en-us/library)を使用してクエリを実行します/ms188001.aspx) –

関連する問題