MySQL Pivot准备语句AS整数错误

时间:2015-12-01 16:27:13

标签: mysql string format pivot

可能是一个非常基本的错误,但这是我的问题。 有些用户喜欢给定文档的某些页面,我的目的是返回每个用户喜欢的页面细分 以下是两个表的简化视图:

用户表

id name
---------
1  Jim
2  John

投票表

userid pageno voteup
1      1      1
1      2      1
2      1      1
2      2      1
2      3      1

我想要的输出如下:

id name Page 1 Page 2 Page 3
1  Jim  1      1      0
2  John 1      1      1

我已经按照以下方式做了我准备好的陈述。我的目的是为列名显示'Page 1','Page 2'等,而不是下面的'test',但由于我的pageno字段是一个int,我在格式化列名时失败了。我尝试过各种各样的东西,但没有运气。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(v.pageno = ',
      pageno, 
      ', v.voteup, 0)) AS ',
      'test'
    )
  ) INTO @sql
FROM vote;

SET @sql = CONCAT('SELECT u.id, u.name, ', @sql, ' 
FROM user u
LEFT JOIN vote AS v 
ON u.id = v.id
GROUP BY u.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我确信这是我遗失的非常基本的东西。你能帮忙吗? 提前致谢 Link to SQLFiddle

1 个答案:

答案 0 :(得分:0)

如果您需要动态解决方案,这可以解决问题,但不是动态的......

 select 

n.id,
n.name,
CASE WHEN v.pageno=1 THEN sum(v.voteup) ELSE NULL END as "Page 1"
CASE WHEN v.pageno=2 THEN sum(v.voteup) ELSE NULL END as "Page 2"

from votetable as v

join usertable as n on n.id = v.userid