我正在尝试使用以下查询生成没有列出价格或里程的车辆列表。当我尝试运行查询时,我收到错误“ORA-00936:缺少表达式”,但似乎无法找出原因。从这里的其他帖子,我可以看到使用IS NULL应该是WHEN部分的适当术语,但我没有看到查询本身有任何问题。任何帮助将不胜感激!
Select
SUM(CASE vehicles.mileage WHEN IS NULL THEN 1 ELSE 0 END) NO_MILEAGE,
SUM(CASE vehicles.price WHEN IS NULL THEN 1 ELSE 0 END) NO_PRICE
From
[data]
答案 0 :(得分:4)
简单的语法错误:
Select
SUM(CASE WHEN vehicles.mileage IS NULL THEN 1 ELSE 0 END) NO_MILEAGE,
SUM(CASE WHEN vehicles.price IS NULL THEN 1 ELSE 0 END) NO_PRICE
From
[data];
这假设您的vehicles
子句中有一个名为FROM
的表,或者[data]
中名为vehicles
的具有对象或嵌套表类型的列。此外,资格vehicles.
没有意义。
使用"搜索" CASE
在两个备选方案之间作出决定。
Details about "simple" and "searched" CASE
in the Oracle online reference.
您还可以针对特定情况使用 COUNT
。 The online reference again:
如果您指定
expr
,则COUNT
会返回expr
不为空的行数。如果指定星号(*),则此函数返回所有行, 包括重复和空值。
COUNT
永远不会返回null。
所以你需要区别:
Select
COUNT(*) - COUNT(vehicles.mileage) AS NO_MILEAGE,
COUNT(*) - COUNT(vehicles.price) AS NO_PRICE
From
[data];
答案 1 :(得分:1)
您也可以使用Oracle的NVL2
函数:
Select
SUM(NVL2(vehicles.mileage, 0, 1)) NO_MILEAGE,
SUM(NVL2(vehicles.price, 0, 1)) NO_PRICE
From
[data]