2017-10-17 22 views
-2

數據集我工作的例子是:使用條件提取的最後一列

 
ColA ColB ColC ColD ColE ColF ColG ColH ColI ColJ ColK ColL ColM 
X1 5  X2 6  X3 5  X4 4  X5 5  X6 3  X7 

與號碼列表示IDS,其餘的代表值等

我想從單元格中提取值,該單元格恰好落在id之後。5.如果查看示例,可以看到不斷重複。我需要提取單元格的最新值。所以,在這種情況下,它應該是'X6'。

你能幫我寫這個問題的SQL查詢嗎?

謝謝 Nimish

+0

標記您使用的RDBMS(MySQL,MS SQL Server等,...)。 –

+0

數據庫中沒有單元格。你實際上使用Excel嗎? – GSerg

+0

正如你自己所說,5重複。那麼你認爲哪5個,以確定以下期望值? – Yunnosch

回答

2

使用CASE表達,以相反的順序經過柱:

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE table_name (ColA, ColB, ColC, ColD, ColE, ColF, ColG, ColH, ColI, ColJ, ColK, ColL, ColM) As 
SELECT 'X1', '5', 'X2', '6', 'X3', '5', 'X4', '4', 'X5', '5', 'X6', '3', 'X7' FROM DUAL 

查詢1

SELECT CASE 
     WHEN ColL = '5' THEN ColM 
     WHEN ColK = '5' THEN ColL 
     WHEN ColJ = '5' THEN ColK 
     WHEN ColI = '5' THEN ColJ 
     WHEN ColH = '5' THEN ColI 
     WHEN ColG = '5' THEN ColH 
     WHEN ColF = '5' THEN ColG 
     WHEN ColE = '5' THEN ColF 
     WHEN ColD = '5' THEN ColE 
     WHEN ColC = '5' THEN ColD 
     WHEN ColB = '5' THEN ColC 
     WHEN ColA = '5' THEN ColB 
     END AS latest 
FROM table_name 

Results

| LATEST | 
|--------| 
|  X6 | 
+1

Case _expression_。 – jarlh

+0

@jarlh更新,謝謝 - 總是樂於與術語迂腐。 (雖然Oracle文檔在[SQL](https://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm)和[PL/SQL](https:// docs)之間不一致。 oracle.com/cd/B19306_01/appdev.102/b14261/case_statement.htm)) – MT0

+0

PL/SQL也有一個case語句。 – jarlh

0

如果你的列名是動態的,你可以通過在命令動態地選擇所需的列使用PL/SQL塊。請注意,在此我使用ROWNUM < 2將行限制爲1.如果表中有多行,則需要使用另一個循環。

SET SERVEROUTPUT ON; 

DECLARE 
    v_col_value VARCHAR2 (10) := NULL; 
    v_prev_value VARCHAR2 (10) := NULL; 
BEGIN 
    FOR cur IN ( SELECT COLUMN_NAME 
        FROM ALL_TAB_COLUMNS 
        WHERE TABLE_NAME = 'TST_TAB' 
       ORDER BY COLUMN_NAME DESC) 
    LOOP 
     v_prev_value := v_col_value; 

     EXECUTE IMMEDIATE 
     'SELECT ' || cur.column_name || ' FROM TST_TAB WHERE ROWNUM < 2' 
     INTO v_col_value; 

     IF v_col_value = '5' 
     THEN 
     DBMS_OUTPUT.PUT_LINE (v_prev_value); 

     EXIT; 
     END IF; 
    END LOOP; 
END; 
相關問題