2013-11-14 44 views
1

這是我的問題。我有一個Microsoft SQL服務器數據庫表,裏面有一堆列。 (我不能改變這個表的數據結構!)需要在一列中查找值然後從另一列返回值

  • 列的21本表中代表「實際」大小
  • 在這個表代表「相對」列的21尺寸
  • 實際大小列通過列號與相對大小列相對應。
    (例如:ActualColumn1對應於RelativeColumn1ActualColumn2對應於RelativeColumn2ActualColumnX到RelativeColumnX多達21)

基於所輸入的 '實際' 值我需要返回相關的「相對」值。

我已經成功完成了我需要的部分內容,但case語句最多有10個條件,因此將無法覆蓋表中的所有21列。解決這個問題的最好方法是什麼?我的目標是將其放入select語句中,以便我可以選擇Relative Size並將其返回到我的查詢中。什麼我的情況下聲明沒有

例子:

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 

謝謝您的幫助!

+0

你不需要窩案陳述的東西,比如'CASE WHEN(table.ActualColumn1 =安勤)THEN table.RelativeColumn1 CASE WHEN(table.ActualColumn2 =安勤)THEN table.RelativeColumn2 ... ELSE NULL END AS RValue'會讓開始更容易:-) – talegna

回答

3

如果您將您的case語句更改爲搜索的case,那麼您可以有更多的when when子句。

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

謝謝,我剛剛弄明白了。你在現場。 – Chris1804505

相關問題