Oracle查询 我有一个带有硬编码值“ N / A”的列值以及其他char值。我需要编写一个选择查询来获取将该列的最小值与其他列集进行分组的..但挑战是我需要用另一个字符'Abc'以及min函数替换'N / A'的硬编码值
选项1:nvl无效,因为该值是硬编码的
选项2:在select语句中进行解码以及在解码列表中使用min子句,然后将by子句与在选择列表中使用的其他列进行分组
但是,出现错误
ORA-00979 :不是组表达式。
示例:
Select a, b, decode(z,'N/A','abc',min(z))
From table 1, table 2
Where table 1.p=table2.q
Group by a,b
Having c.table1 >= table2.d
答案 0 :(得分:1)
您应该在DECODE
函数中使用MIN
,而不要相反。但是,我可能只在这里使用一个CASE
表达式:
SELECT
a,
b,
MIN(CASE WHEN z = 'N/A' THEN 'abc' ELSE z END) AS min_value
FROM table1 t1
INNER JOIN table2 t2
ON t1.p = t2.q
GROUP BY
a,
b;
上面的CASE
表达式只是为每个组取z
的最小值,MIN(z)
之间的唯一区别是该值应该为N/A
,将被视为abc
。