MONTH 不是 Oracle 函数,您不希望在 CURRENT_DATE 之后使用大括号,您需要为聚合值指定别名。
CREATE VIEW ViewA AS
SELECT SUM(meter) AS total_reading
FROM reading
WHERE EXTRACT( MONTH FROM columnName) = EXTRACT( MONTH FROM CURRENT_DATE );
但是,这将汇总任何年份的当前月份。如果您只想要当前月份,那么:
CREATE VIEW ViewA AS
SELECT SUM(meter) AS total_reading
FROM reading
WHERE columnName >= TRUNC( CURRENT_DATE, 'MM' )
AND columnName < ADD_MONTHS( TRUNC( CURRENT_DATE, 'MM' ), 1 );
db小提琴here
但是,您的“作业”问题是:
每个抄表员在当月抄表的次数
你没有找到这个;您可能想使用COUNT 而不是SUM 并且您想使用GROUP BY 来获取每个抄表器的值(但您没有给出表定义,因此不清楚应该按哪一列分组) .
但类似:
CREATE VIEW ViewA AS
SELECT meter_reader,
COUNT(meter) AS num_meters_read
FROM reading
WHERE columnName >= TRUNC( CURRENT_DATE, 'MM' )
AND columnName < ADD_MONTHS( TRUNC( CURRENT_DATE, 'MM' ), 1 )
GROUP BY meter_reader;