我有一个特定表,其中包括下一个数据示例
---- ------------- -------------- --------------------------------------------------- --------------- |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;