2016-04-08 2 views
0

テーブルBは、ROW of ParameterCodeとValueを持ちます。テーブルAからすべての列を選択する方法IF列名が別のテーブルで指定されています。TSQL

私は異なる変数の列を持つテーブルAを持っています。

B.ParameterCode(行)が(この場合は原点に)Aの列名と一致する場合、私はそれを返すたいB.

におけるParameterCodeの値での列名と一致します。

基本的に、行の値から列名を検索して一致させるにはどうすればよいですか?

私は何か非常に単純なことを忘れていると確信しています。

表B例:

DECLARE @B TABLE(ParameterCode VARCHAR(64), Value varchar(64)) 

INSERT @B VALUES ('Origin','SLC') 

表A例

DECLARE @A TABLE(
Origin varchar(100), 
Destination VARCHAR(100), 
Passengers int 
) 
insert into @A values 
('SLC','JFK','1') 

そしてのみ原点が選択されます。

あなたが最初にあなたのテーブル@Aをアンピボットする必要があり、その後、@BJOINを行う結果

DECLARE @Result TABLE(
Origin varchar(100), 

) 
insert into @Result values 
('SLC') 
+0

あなたの説明とテーブル名にはありませんまったくマッチする。 – Squirrel

+0

を変更するには、基本的に 'INNER JOIN'を使用して2つのテーブルの一致する行を探します。他のテーブルに存在する行を見つける 'EXISTS' – Squirrel

+0

私の問題は、あるテーブルのカラム名を別のテーブルのカラム値に一致させたいのです。 –

答えて

1

:例の

SQL Fiddle

;WITH CteValues AS(
    SELECT x.* , a.Passengers 
    FROM @A a 
    CROSS APPLY (VALUES 
     ('Origin', Origin), 
     ('Destination', Destination) 
    )x(ParameterCode, ParameterValue) 
) 
SELECT cv.ParameterValue, cv.Passengers 
FROM CteValues cv 
INNER JOIN @B b 
    ON b.ParameterCode = cv.ParameterCode 
    AND b.Value = cv.ParameterValue 
関連する問題