Reputation: 51
I want to create function or view which will show some information particular year monthly.
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
How can I call view like this without
WHERE EXTRACT (YEAR FROM h_date) = '2015'
but with the year of the call? For example
SELECT * FROM name_view ('2015')
Upvotes: 0
Views: 333
Reputation: 4815
You can try this function passing date as a parameter:
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;
You can call it like
select * from show_info(date)
here date will be whatever date you want to pass
Upvotes: 1
Reputation: 556
You should use YEAR in the SELECT and when you SELECT from the view you use WHERE year = 2015.
CREATE OR REPLACE VIEW name_view AS
SELECT d_name,
SUM("Jan") "Jan",
SUM("Feb") "Feb",
YEAR,
....
Use of view:
SELECT *
FROM name_view
WHERE year = '2015';
Upvotes: 1