>>>> 2012/11/19 05:05 +0100, Mogens Melander >>>>
I found an article on:

http://stackoverflow.com/questions/3122424/dynamic-mysql-query-view-for-crosstab

Describing how to do the dynamic generation of SQL statements. 
<<<<<<<<
And I was inspired to do some such thing to one of my views.
This view has three fields:
"City-ZIP": a string of 5-digit ZIP-code and place-name;
Hoads: one of 11 distinct number from 1 through 7.5, showing how good the 
member is;
Members: howmany so good members dwell at that place.

It is more convenient to show this in a table with City-ZIP at the left, HoadS 
across the top, and Members throughout the middle. OpenOffice Calc has the 
needed operation, and I regularly used it for making the table. But with this, 
I can do much of it in MySQL (no row totals):

SELECT 'SELECT "City-ZIP", ' || GROUP_CONCAT('SUM(IF(HoadS = ' || HoadS || ', 
Members, NULL)) AS "' || HoadS || '"') || '
        FROM ZIPbwise
        GROUP BY "City-ZIP" WITH ROLLUP'
FROM (SELECT HoadS FROM zipbwise GROUP BY HoadS) AS g

It yields this query:

SELECT "City-ZIP",
        SUM(IF(HoadS = 1.0, Members, NULL)) AS "1.0",
        SUM(IF(HoadS = 1.5, Members, NULL)) AS "1.5",
        SUM(IF(HoadS = 2.0, Members, NULL)) AS "2.0",
        SUM(IF(HoadS = 3.0, Members, NULL)) AS "3.0",
        SUM(IF(HoadS = 4.0, Members, NULL)) AS "4.0",
        SUM(IF(HoadS = 4.5, Members, NULL)) AS "4.5",
        SUM(IF(HoadS = 5.0, Members, NULL)) AS "5.0",
        SUM(IF(HoadS = 5.5, Members, NULL)) AS "5.5",
        SUM(IF(HoadS = 6.5, Members, NULL)) AS "6.5",
        SUM(IF(HoadS = 7.0, Members, NULL)) AS "7.0",
        SUM(IF(HoadS = 7.5, Members, NULL)) AS "7.5" 
FROM ZIPbwise GROUP BY "City-ZIP" WITH ROLLUP


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

Reply via email to