sql - MySQL dynamic pivot with group concat -


good morning everyone,

i have view called salesdata looks , want pivot dynamically since might updated later on.

+-------------+------------+------+ | salestotal  | salesyear  |      | +-------------+------------+------+ |    3016207  |       2008 |      | |    3079627  |       2009 |      | |    3133681  |       2010 |      | |    3102944  |       2011 |      | |    3126710  |       2012 |      | |    3123600  |       2013 |      | |    3116452  |       2014 |      | |    3175186  |       2015 |      | |     122371  |       2016 | +-------------+------------+------+ 

i have designed following query doesn't seem work. mysql workbench giving me weird error message :

error code: 1064. have error in sql syntax; check manual corresponds mysql server version right syntax use near ' max(case when salesyear='2008 3016207 else 0 end) 2008,max(case when sa' @ line 1 

my query follows :

set @sql = null; select      group_concat(distinct concat('max(case when salesyear=''',salesyear,''' ',salestotal, ' else 0 end) ',salesyear)) @sql  salesdata;  set @sql = concat('select, ', @sql, ' salesdata');  prepare stmt @sql; execute stmt; deallocate prepare stmt; 

i grateful if give me hint. lot :))

oh btw, result i'm looking :

|    2008 |    2009 |    2010 |    2011 |    2012 |    2013 |    2014 |    2015 |  | +---------+---------+---------+---------+---------+---------+---------+---------+--+ | 3133681 | 3133681 | 3133681 | 3102944 | 3126710 | 3126710 | 3126710 | 3126710 |  | +---------+---------+---------+---------+---------+---------+---------+---------+--+ 

i using following query whole point of question making query dynamic ;)) :

select   max(case when (salesyear='2010') salestotal else 0 end) '2008',   max(case when (salesyear='2010') salestotal else 0 end) '2009',   max(case when (salesyear='2010') salestotal else 0 end) '2010',   max(case when (salesyear='2011') salestotal else 0 end) '2011',   max(case when (salesyear='2012') salestotal else 0 end) '2012',   max(case when (salesyear='2012') salestotal else 0 end) '2013',    max(case when (salesyear='2012') salestotal else 0 end) '2014',    max(case when (salesyear='2012') salestotal else 0 end) '2015',    max(case when (salesyear='2012') salestotal else 0 end) '2016'    salesdata 

edit : found error. salesyear in expression not being concatenated properly.

group_concat(distinct concat('max(case when salesyear=''',salesyear,''' ',salestotal, ' else 0 end) ',salesyear)) 

when replace string value shown below, query works perfectly. knows how put salesyear variable between single quotes ?

 group_concat(distinct concat('max(case when salesyear=''',salesyear,''' ',salestotal, ' else 0 end) ','test')) 

concat('"',salesyear,'"') works. seems single quotes don't work :)


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

ruby on rails - Seeing duplicate requests handled with Unicorn -