Mysql的静态列转行以及动态的列转行
首先是静态的列转行。
SELECT Date ,
MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信
FROM TabName GROUP BY Date
下面是动态的列换行的一个步骤。
-第一步,先拿到各个列,duty代表类,ratio代表比例,可能不同时间一个duty有不同的ratio,所以为了前端方便遍历,进行行转列处理。
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(a.duty = ''',
a.duty,
''', a.ratio, 0)) AS ''',
a.duty, ''''
)
)
FROM t_major_duty_break a;
– 第二步进行声明,将语句拼接完整
SET @EE = '';
set @timestyle='2019-10-30';
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(duty = ''',
duty,
''', ratio, 0)) AS ''',
duty, ''''