WSC*_*WSC 2 sql oracle oracle-sqldeveloper
我CASE WHEN在SELECT中执行,将所有null转换为'None'。我还想获取一个特定的非null值(例如'X'),并将其与null值相同(例如将它们全部设为'None')。
我做这样的事情:
SELECT
CASE WHEN Val = 'X' THEN 'None' ELSE NVL(Val, 'None') END ValCol
FROM tbl
GROUP BY Val
Run Code Online (Sandbox Code Playgroud)
我最后得到的是两行“无”;本质上,两个“无”值是分开处理的。
如何合并它们?
问题是GROUP BY。您按进行分组Val,因此所有带有Valas的行都X分组在一起,而其中的所有行都Val IS NULL分组在一起。实际上这将导致2行,但是由于您的CASE表达式而显示相同的值。
您可以通过与CASE而不是分组进行解决Val:
SELECT
CASE WHEN Val = 'X' THEN 'None' ELSE NVL(Val, 'None') END ValCol
FROM
tbl
GROUP BY
CASE WHEN Val = 'X' THEN 'None' ELSE NVL(Val, 'None') END
Run Code Online (Sandbox Code Playgroud)
作为旁注,我发现以下CASE内容更具表现力:
CASE WHEN Val = 'X' OR Val IS NULL THEN 'None' ELSE Val END
Run Code Online (Sandbox Code Playgroud)