2017-01-16 58 views
-1

我有6列與0,1,2,3中的任何一個具有相同的值。我想要顯示結果,如0代表SUCCESS,1或2代表失敗,3代表不適用。因此,如果在DB值是:使用解碼選擇多列

col A | col B | col C | col D | col E | col F 
0  | 1 | 2 | 0 | 3 | 2 

輸出應該是:

col A | col B | col C | col D | col E | col F 
S  | F | F |  S | NA | F 

是否有可能在選擇所有列一次,而不是分別選擇他們這樣做,通過解碼?

+0

如果你想在一列顯示結果是可能的。但是,您的輸出表明您希望結果位於多列中。所以我的答案是不可能的。您將不得不多次使用解碼/外殼 –

+1

通過重新分析表格,解碼產生的單個行,然後迴轉到原始佈局,但它幾乎肯定不值得做額外的工作,而且它會更簡單,更清晰地解碼每個列。 –

回答

0

如果我正確理解你的問題,這聽起來像你只需要一個CASE表達式(或解碼,如果你喜歡,但這是自文檔比的情況下,表達降低),沿着線:

case when some_col = 0 then 'S' 
    when some_col in (1, 2) then 'F' 
    ... 
    else some_col -- replace with whatever you want the output to be if none of the above conditions are met 
end 

或可能:

case some_col 
    when 0 then 'S' 
    when 1 then 'F' 
    ... 
    else some_col -- replace with whatever you want the output to be if none of the above conditions are met 
end 

所以您的查詢看起來是這樣的:

select case ... 
     end col_a, 
     ... 
     case ... 
     end col_f 
from your_table; 
0

是否可以通過一次選擇所有列解碼來完成,而不是單獨選擇它們?
沒有

然而,除了使用支點,我看到的唯一解決辦法是使用PL/SQL:

1,本是我如何模擬你的表

SELECT * 
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS 
(SELECT 0, 1, 2, 0, 3, 2 FROM DUAL) 
    SELECT * 
     FROM tb1) 

2.I將列,它們之間用逗號追加在一起,並將它們保存到字符串表

SELECT col_a || ',' || col_b || ',' || col_c || ',' || col_d || '.' || col_e || ',' || col_f 
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS (SELECT 0, 1, 2, 0, 3, 2 FROM DUAL) 
    SELECT * 
     FROM tb1) 

3.Then我會用REGEXP_REPLACE以每次

SELECT REPLACE (REGEXP_REPLACE (REPLACE ('0,1,2,0,3,2', 0, 'S'), '[1-2]', 'F'), 3, 'NA') COL_STR 
FROM DUAL 

4.更換您的值一列使用動態SQL我會使用ROWID或任何你打算做更新表。我提出這個SQL將串入列

SELECT REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 1) AS COL_A, 
     REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 2) AS COL_B, 
     REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 3) AS COL_C, 
     REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 4) AS COL_D, 
     REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 5) AS COL_E, 
     REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 6) AS COL_F 
FROM tst1) 

所有這一切都是非常繁瑣的,它可能需要一些時間分開。使用DECODECASE將更容易查看和解釋,因此更容易維護。