如何选择表中的所有列在另一个表TSQL中指定了IF列名

时间:2016-04-08 01:36:54

标签: sql-server

我有表B,它将具有ParameterCode和Value的行。

我有一个表A,它将包含不同变量的列。

我希望将A的列名与B中的ParameterCode值相匹配。

如果B.ParameterCode(row)匹配A中的列名(在本例中为origin),我想返回它。

基本上,如何从行值中查找和匹配列名?

我确信我只是忘记了一些非常简单的事情。

表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')

1 个答案:

答案 0 :(得分:1)

您需要先取消@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