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
Post a Comment