2016-04-08 1 views
0

У меня есть таблица B, которая будет иметь строки ParameterCode и Value.Как выбрать все столбцы из таблицы. Имя столбца IF указано в другой таблице. TSQL

У меня есть таблица A, которая будет иметь столбцы разных переменных.

Хочу совпадать с именем столбца A со значением ParameterCode в B.

Если 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') 

И только происхождение будет выбран.

Результат

DECLARE @Result TABLE(
Origin varchar(100), 

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

ваше описание и имя таблицы в примере не матч вообще. Пожалуйста, измените – Squirrel

+0

, в основном вы используете 'INNER JOIN', чтобы найти соответствующие строки из двух таблиц. Или 'EXISTS', чтобы найти строки, которые существуют в другой таблице – Squirrel

+0

Моя проблема в том, что я хочу сопоставить имя столбца одной таблицы со значением строки другого. –

ответ

1

Вы должны UNPIVOT ваш стол @A первым, а затем сделать JOIN на @B:

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 
Смежные вопросы