需要在一列中查找值,然后从另一列返回值

时间:2013-11-14 16:41:59

标签: sql sql-server tsql

这是我的问题。我有一个Microsoft SQL服务器数据库表,其中包含一堆列。 (我无法更改此表的数据结构!)

  • 此表中的21列代表“实际”尺寸
  • 此表中的21列代表'相对'尺寸
  • “实际大小”列通过列号对应“相对大小”列。
    (例如: ActualColumn1 对应 RelativeColumn1 ActualColumn2 对应 RelativeColumn2 ActualColumnX to RelativeColumnX 最多21个)

根据输入的'Actual'值,我需要返回相关的'Relative'值。

我已经成功完成了以下case语句所需的部分内容,但case语句最多有10个条件,因此无法覆盖表中的所有21列。解决这个问题的最佳方法是什么?我的目标是将它放入一个select语句,以便我可以选择相对大小并在我的查询中返回它。

我对案例陈述所做的例子:

SELECT
    T.AValue
    CASE WHEN (T.ActualColumn1 = T.AValue) then T.RelativeColumn1 ELSE
        CASE WHEN (T.ActualColumn2 = T.AValue) THEN T.RelativeColumn2 ELSE
            CASE WHEN (T.ActualColumn3 = T.AValue) THEN T.RelativeColumn3 ELSE
                CASE WHEN (T.ActualColumn4 = T.AValue) THEN T.RelativeColumn4 ELSE
                    NULL
                END 
            END 
        END 
    END AS RValue
FROM T

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果您将案例陈述更改为已搜查的案例,则在子句时可以有10个以上。

select T.AValue,
       case T.AValue
         when T.ActualColumn1 then T.RelativeColumn1
         when T.ActualColumn2 then T.RelativeColumn2
         when T.ActualColumn3 then T.RelativeColumn3
         when T.ActualColumn4 then T.RelativeColumn4
       end as RValue
from T