Oracle 中的嵌套 case 语句
Nested case statement in Oracle
过去几个小时我一直盯着这个看,但我看不出我在哪里放弃了这个查询,代码已经匿名化,所以请原谅替换标识符:
select count (distinct(case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) <= '18-nov-2019')
and
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) >= '1-oct-2019')
then
MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end)end) is null
then case when to_date >= '1-oct-2019' and from_date <= '18-nov-2019' then c_id end
)) from my_table; -- error code references this line
我收到的错误代码:ORA-00905:缺少关键字
00905.00000 - "missing keyword"。我在这个网站上搜索了类似的东西,但找不到适合我具体情况的东西。帮助将不胜感激。谢谢
以下两个case语句没有"end"
select count (distinct(case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) <= '18-nov-2019')
and
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) >= '1-oct-2019')
then
MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end)end) is null
then case when to_date >= '1-oct-2019' and from_date <= '18-nov-2019' then c_id end
end
end
)) from my_table;
case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
您在错误行缺少两个 END
关键字。
查看以下内容:
SELECT
COUNT(DISTINCT(CASE
WHEN STATUS NOT IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN(CASE
WHEN(MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END) <= '18-nov-2019')
AND(MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END) >= '1-oct-2019') THEN MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END)
END) IS NULL THEN CASE
WHEN TO_DATE >= '1-oct-2019'
AND FROM_DATE <= '18-nov-2019' THEN C_ID
END -- this is missing in your code
END -- this is missing in your code
END))
FROM
MY_TABLE;
干杯!!
过去几个小时我一直盯着这个看,但我看不出我在哪里放弃了这个查询,代码已经匿名化,所以请原谅替换标识符:
select count (distinct(case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) <= '18-nov-2019')
and
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) >= '1-oct-2019')
then
MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end)end) is null
then case when to_date >= '1-oct-2019' and from_date <= '18-nov-2019' then c_id end
)) from my_table; -- error code references this line
我收到的错误代码:ORA-00905:缺少关键字 00905.00000 - "missing keyword"。我在这个网站上搜索了类似的东西,但找不到适合我具体情况的东西。帮助将不胜感激。谢谢
以下两个case语句没有"end"
select count (distinct(case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) <= '18-nov-2019')
and
(MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end) >= '1-oct-2019')
then
MIN(case when status in ('Larry','Curly','Moe','Shemp')
then case when to_char(my_date,'YYYY') = 1900
then my_dttm
else my_dttm
end
end)end) is null
then case when to_date >= '1-oct-2019' and from_date <= '18-nov-2019' then c_id end
end
end
)) from my_table;
case when status not in ('Larry','Curly','Moe','Shemp')
then case when(case when
您在错误行缺少两个 END
关键字。
查看以下内容:
SELECT
COUNT(DISTINCT(CASE
WHEN STATUS NOT IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN(CASE
WHEN(MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END) <= '18-nov-2019')
AND(MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END) >= '1-oct-2019') THEN MIN(CASE
WHEN STATUS IN(
'Larry', 'Curly', 'Moe', 'Shemp'
) THEN CASE
WHEN TO_CHAR(MY_DATE, 'YYYY') = 1900 THEN MY_DTTM
ELSE MY_DTTM
END
END)
END) IS NULL THEN CASE
WHEN TO_DATE >= '1-oct-2019'
AND FROM_DATE <= '18-nov-2019' THEN C_ID
END -- this is missing in your code
END -- this is missing in your code
END))
FROM
MY_TABLE;
干杯!!