Substitute column in SELECT with static value?

Started by Stefan Schwarzerover 18 years ago4 messagesgeneral
Jump to latest
#1Stefan Schwarzer
stefan.schwarzer@grid.unep.ch

Hi there,

I run an aggregation on national statistics to retrieve regional
values (for Africa, Europe, ...). Now, I want to have a global
aggregation as well. The easiest thing for my PHP/HTML procedure
would be to have the global row make appear within the regional
result. So it would be something like

name | y_2001 | y_2002 .....
--------------------------------------------------------
Africa | 2323 | 342323
Europe | ....
.....
Global | 849309 | .....

The global total can be derived by for example be letting out the
COALESCE and GROUP BY r.name parameters in the SQL below and using
UNION ALL to attach this then as second query. But then, there is one
column less - the one for the regional name.

SELECT * FROM crosstab( '
SELECT
COALESCE(r.name, ''''),
year_start AS year,
SUM(value) AS value
FROM
co2_total_cdiac AS d
RIGHT JOIN
countries_view AS c ON c.id = id_country
RIGHT JOIN
regions AS r ON r.id = c.reg_id
WHERE
year_start = 2001 OR year_start = 2002 OR year_start = 2003
GROUP BY
r.name,
year_start
ORDER BY
1,2;
', 3) AS ct(name varchar, y_2001 numeric, y_2002 numeric, y_2003
numeric)
ORDER BY
name ASC

Is there a way to substitute this with a "static" value, such as
"Global"? So, that the query still results in three columns?

Thanks for any advice!

Stef

____________________________________________________________________

Stefan Schwarzer

Lean Back and Relax - Enjoy some Nature Photography:
http://photoblog.la-famille-schwarzer.de

Appetite for Global Data? UNEP GEO Data Portal:
http://geodata.grid.unep.ch
____________________________________________________________________

#2Scott Marlowe
scott.marlowe@gmail.com
In reply to: Stefan Schwarzer (#1)
Re: Substitute column in SELECT with static value?

On Nov 16, 2007 4:26 AM, Stefan Schwarzer <stefan.schwarzer@grid.unep.ch> wrote:

Hi there,

I run an aggregation on national statistics to retrieve regional values (for
Africa, Europe, ...). Now, I want to have a global aggregation as well. The
easiest thing for my PHP/HTML procedure would be to have the global row make
appear within the regional result. So it would be something like

name | y_2001 | y_2002 .....
--------------------------------------------------------
Africa | 2323 | 342323
Europe | ....
.....
Global | 849309 | .....

Is there a way to substitute this with a "static" value, such as "Global"?
So, that the query still results in three columns?

Sure, just include it as 'Global'

Note the single, not double, quotes.

#3Stefan Schwarzer
stefan.schwarzer@grid.unep.ch
In reply to: Scott Marlowe (#2)
Re: Substitute column in SELECT with static value? (Crosstab problem?)

Hi there,

I run an aggregation on national statistics to retrieve regional
values (for
Africa, Europe, ...). Now, I want to have a global aggregation as
well. The
easiest thing for my PHP/HTML procedure would be to have the
global row make
appear within the regional result. So it would be something like

name | y_2001 | y_2002 .....
--------------------------------------------------------
Africa | 2323 | 342323
Europe | ....
.....
Global | 849309 | .....

Is there a way to substitute this with a "static" value, such as
"Global"?
So, that the query still results in three columns?

Sure, just include it as 'Global'

Note the single, not double, quotes.

That's what I thought at the beginning too. But it didn't work.

Both queries are being executed separately correctly.

SELECT * FROM crosstab( '
SELECT
COALESCE(r.name, '''') AS name,
year_start AS year,
SUM(value) AS value
FROM
co2_total_cdiac AS d
RIGHT JOIN
countries_view AS c ON c.id = id_country
RIGHT JOIN
regions AS r ON r.id = c.reg_id
WHERE
year_start = 2002
GROUP BY
r.name,
year_start

UNION ALL

SELECT
'Global' AS name,
year_start AS year,
SUM(value) AS value
FROM
co2_total_cdiac AS d
RIGHT JOIN
countries_view AS c ON c.id = id_country
RIGHT JOIN
regions AS r ON r.id = c.reg_id
WHERE
year_start = 2002
GROUP BY
year_start

ORDER BY
1,2;
', 3) AS ct(name varchar, y_2001 numeric, y_2002 numeric, y_2003
numeric)
ORDER BY
name ASC

#4Scott Marlowe
scott.marlowe@gmail.com
In reply to: Stefan Schwarzer (#3)
Re: Substitute column in SELECT with static value? (Crosstab problem?)

On Nov 19, 2007 1:34 AM, Stefan Schwarzer <stefan.schwarzer@grid.unep.ch> wrote:

Hi there,

I run an aggregation on national statistics to retrieve regional
values (for
Africa, Europe, ...). Now, I want to have a global aggregation as
well. The
easiest thing for my PHP/HTML procedure would be to have the
global row make
appear within the regional result. So it would be something like

name | y_2001 | y_2002 .....
--------------------------------------------------------
Africa | 2323 | 342323
Europe | ....
.....
Global | 849309 | .....

Is there a way to substitute this with a "static" value, such as
"Global"?
So, that the query still results in three columns?

Sure, just include it as 'Global'

Note the single, not double, quotes.

That's what I thought at the beginning too. But it didn't work.

Both queries are being executed separately correctly.

SELECT * FROM crosstab( '
SELECT
COALESCE(r.name, '''') AS name,
year_start AS year,
SUM(value) AS value
FROM
co2_total_cdiac AS d
RIGHT JOIN
countries_view AS c ON c.id = id_country
RIGHT JOIN
regions AS r ON r.id = c.reg_id
WHERE
year_start = 2002
GROUP BY
r.name,
year_start

UNION ALL

SELECT
'Global' AS name,

Remember, you're calling this as an arg to a function, so you need to
double up your quotes...

''Global''