2015-05-13 6 views
0

Я хочу создать функцию или просмотр, который будет показывать некоторую информацию в конкретном году в месяц.Вызов функции или вида с параметром

CREATE OR REPLACE VIEW name_view AS 
    SELECT d_name, 
    SUM("Jan") "Jan", 
    SUM("Feb") "Feb" 
    ... 
    FROM (
    select distinct d_name, 
     COUNT(CASE WHEN EXTRACT (MONTH FROM h_date) = '01' THEN query_string ELSE NULL END) "Jan", 
     COUNT(CASE WHEN EXTRACT (MONTH FROM h_date) = '02' THEN query_string ELSE NULL END) "Feb", 
    .. 
     from h 
      inner join d on h_d = d_id 
       WHERE EXTRACT (YEAR FROM h_date) = '2015' 
      GROUP BY d_name) sub query 
    GROUP BY d_name 

Как я могу назвать вид, как это без

ГДЕ EXTRACT (YEAR FROM h_date) = '2015'

но с годом вызова? Например

SELECT * FROM name_view ('2015')

+1

Создать функцию, которая возвращает таблицу. –

+1

вместо этого вы должны создать хранимую процедуру. @@ « – User2012384

ответ

1

Вы должны использовать YEAR в SELECT, и когда вы ВЫБРАТЬ с точки зрения использовать WHERE год = 2015.

CREATE OR REPLACE VIEW name_view AS 
SELECT d_name, 
SUM("Jan") "Jan", 
SUM("Feb") "Feb", 
YEAR, 
.... 

Использование зрения:

SELECT * 
FROM name_view 
WHERE year = '2015'; 
1

Вы можете попробовать эту функцию прохождения дату в качестве параметра:

CREATE OR REPLACE FUNCTION "show_info"("DATE" date) 
    RETURNS SETOF show_info AS 
$BODY$SELECT d_name, 
    SUM("Jan") "Jan", 
    SUM("Feb") "Feb" 
    ... 
    FROM (
    select distinct d_name, 
     COUNT(CASE WHEN EXTRACT (MONTH FROM h_date) = '01' THEN query_string ELSE NULL END) "Jan", 
     COUNT(CASE WHEN EXTRACT (MONTH FROM h_date) = '02' THEN query_string ELSE NULL END) "Feb", 
    .. 
     from h 
      inner join d on h_d = d_id 
       WHERE EXTRACT (YEAR FROM h_date) = $1 
      GROUP BY d_name) subquery 
    GROUP BY d_name 
;$BODY$ 
    LANGUAGE sql VOLATILE 
    COST 100 
    ROWS 1000; 

Вы можете назвать это как

select * from show_info(date) 

здесь дата будет независимо от даты вы хотите передать

+0

Эта функция не работает,« SHOW_INFO »и« show_info »не совпадают. Совет: не используйте двойные кавычки» и не используйте символы UPPER CASE для имен объектов как имена функций. –

+0

@FrankHeikens Я отредактировал свой ответ. Я удалил двойные кавычки и изменил название функции в строчных буквах. Спасибо за исправление :) – Madhusudan

Смежные вопросы