从倍数列中获取最后一列




我有一个特定表,其中包括下一个数据示例

---- ------------- -------------- --------------------------------------------------- --------------- |id |名称|Level1 |Level2 |Level3 |Level4 | ---- ------------- -------------- --------------------------------------------------- --------------- |1 |胡安|操作|0 |0 |0 ||2 |佩德罗|操作|维护|用户|0 ||3 |Guillermo |操作|客户|0 |0 ||4 |马里奥|操作|协调员|工厂|生产| ---- ------------- -------------- --------------------------------------------------- --------------- 

我想获得下一个结果
结果示例:

----- ------------ ------------------------------------------ |id |名称|最后一个级别,值| ----- ------------ ------------------------------------------ |1 |胡安|操作||2 |佩德罗|用户||3 |Guillermo |客户||4 |马里奥|生产| ----- ------------ ------------------------------------------ 

我该怎么做?是否可以?如果可以的话,我想听听主要想法和示例。

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;

最新更新