【发布时间】:2013-08-10 06:37:37
【问题描述】:
我正在尝试将上述脚本从 MySQL 转换为 ORACLE,我完全是使用 ORACLE 数据库和 PL/SQL 的初学者。我读到 MYSQL 中的 IFNULL 相当于 ORACLE 中的 NVL,但我仍然无法转换超出脚本。请帮忙。
SET @r:=0;
CREATE TABLE COUNTRY_MONDIAL AS
SELECT @r:=@r+1 RowN, @Dtf0:=Dtf0 Dtf0, @Dtf1:=Dtf1 Dtf1,
IFNULL((log(log(@Dtf0)+1)+1),0)*9.531408863445597 +
IFNULL((log(log(@Dtf1)+1)+1),0)*9.531408863445696 Score, Id,ID_CITY, Id, dl
FROM (SELECT PKey, MAX(CASE WHEN WordId=205 THEN Count ELSE 0 END) AS Dtf0,
MAX(CASE WHEN WordId=223 THEN Count ELSE 0 END) AS Dtf1
FROM COUNTRY_I WHERE WordId in (205,223)
GROUP BY PKey HAVING Dtf0>0 OR Dtf1>0) Cnt, COUNTRY T1
WHERE Cnt.PKey = Id
ORDER BY Score DESC;
提前致谢。
【问题讨论】:
-
IFNULL可以翻译成IF(field IS NULL,value,field)所以除了这个你还有其他问题吗? -
感谢您的评论,我会尝试,但请您帮助我如何将变量和 MAX(CASE WHEN WordId=205 THEN Count ELSE 0 END) 转换为 Oracle。谢谢
-
max with case 应该可以正常工作。你试过了吗?
-
是的,我试过了,最大值出现 ORA-00937: not a single-group group function error。
-
试试这样:
MAX(IF( WordId=205 , Count, 0)
标签: mysql database plsql oracle11g conventions