簡體   English   中英

從多列獲取值的最后一列

[英]Getting last column with values from multiples columns


我有一個下一個數據示例的特定表

+----+-----------+-----------+-------------+---------+------------+
| id |   name    |  level1   |   level2    | level3  |   level4   |
+----+-----------+-----------+-------------+---------+------------+
|  1 | juan      | operation | 0           | 0       | 0          |
|  2 | pedro     | operation | maintance   | user    | 0          |
|  3 | guillermo | operation | client      | 0       | 0          |
|  4 | mario     | operation | coordinator | factory | productive |
+----+-----------+-----------+-------------+---------+------------+

我想得到下一個結果
結果示例:

+----+-----------+------------------------+
| id |   name    | last level with values |
+----+-----------+------------------------+
|  1 | juan      | operation              |
|  2 | pedro     | user                   |
|  3 | guillermo | client                 |
|  4 | mario     | productive             |
+----+-----------+------------------------+

我該怎么做? 可能嗎? 如果可以的話,我想聽聽主要的想法和例子。

SELECT 
 id,
 name,
 COALESCE(
  NULLIF(level4,'0'),
  NULLIF(level3,'0'),
  NULLIF(level2,'0'),
  level1
 ) AS "last level with values"
FROM ... 

我建議將您的表規范化為這種結構((id, level), name, value) ,這樣查詢起來會容易得多,例如:

SELECT *
FROM table AS t1
WHERE t1.level = (  SELECT MAX(t2.level)
                    FROM table AS t2
                    WHERE t2.id = t1.id);

如果您確實想堅持自己的結構並知道表中要作為列的級別數,那么也可以選擇以下方法:

SELECT id
  , name
  , CASE
    WHEN level4 <> 0 THEN level4
    WHEN level3 <> 0 THEN level3
    WHEN level2 <> 0 THEN level2
    ELSE level1
  END AS lastLevelWithValues
FROM table;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM