[英]How to transpose making columns distinct values with multiples lines for each column
[英]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.