>>>> 2014/10/08 11:38 -0700, Jan Steinman >>>>
However, this pattern will often result in numerous empty columns -- empties 
that would not be there had the table not been pivoted. 
<<<<<<<<

>>>> 2014/10/08 16:42 -0500, Peter Brawley >>>>
MySQL stored procedures are less incomplete, and can do it, but they're 
awkward. 
<<<<<<<<
>From a webpage-link on this very list posted, I learnt of a means of (yes, 
>clumsily) using SQL procedure to build PREPAREd statements that pivot. It 
>entails twice reckoning, once to find good fields, once to pivot and show them.

One selects from a virtual table:
(SELECT DISTINCT YEAR(sales.Date) AS Y FROM ...) AS g

For each good Y one wants this generated (I use ANSI mode, with more PL1 than 
C):
'SUM(IF(YEAR(sales.Date)=' || Y || ', sales.Total, NULL)) AS "' || Y || '"'

The outcome is something like this:
set @yearSal = (SELECT 'SELECT s_product.name AS "Product", ' || 
GROUP_CONCAT('SUM(IF(YEAR(sales.Date)=' || Y || ', sales.Total, NULL)) AS "' || 
Y || '"') || '
        FROM ...'
FROM (SELECT DISTINCT YEAR(sales.Date) AS Y FROM ...) AS g;
PREPARE YearSal FROM @YearSal;
EXECUTE YearSal;

Unhappily, PREPARE takes only user-defined variables, and its prepared 
statement, too, is exposed to the procedure s caller. If the prepared statement 
is "SELECT ... INTO ...", only user-defined variables are allowed after "INTO". 
One who knows the names can learn something about the procedure s working.


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to