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