mysql水平显示结果
我写了一些查询,得到了以下查询结果mysql水平显示结果,mysql,sql,Mysql,Sql,我写了一些查询,得到了以下查询结果 createdate SITE1 SITE2 SITE3 SITE4 SITE5 SITE6 SITE7 SITE8 SITE9 10/2/2014 63 NULL NULL NULL NULL NULL NULL NULL NULL 10/2/2014 NULL NULL NULL NULL NULL NULL NULL N
createdate SITE1 SITE2 SITE3 SITE4 SITE5 SITE6 SITE7 SITE8 SITE9
10/2/2014 63 NULL NULL NULL NULL NULL NULL NULL NULL
10/2/2014 NULL NULL NULL NULL NULL NULL NULL NULL 10
10/3/2014 21 NULL NULL NULL NULL NULL NULL NULL NULL
10/3/2014 NULL NULL NULL NULL NULL NULL NULL NULL 4
现在我想这样展示
createdate SITE1 SITE2 SITE3 SITE4 SITE5 SITE6 SITE7 SITE8 SITE9
10/2/2014 63 NULL NULL NULL NULL NULL NULL NULL 10
10/3/2014 21 NULL NULL NULL NULL NULL NULL NULL 4
注意:我已经对站点名称和createdate进行了分组
你有什么好主意吗?请给我提个建议
enter code here
select alldata.createdate, count(name),
case when name = 'SITE1' then count(1) end AS SITE1,
case when name = 'SITE2' then count(1) end AS SITE2,
case when name = 'SITE3' then count(1) end AS SITE3,
case when name = 'SITE4' then count(1) end AS SITE4,
case when name = 'SITE5' then count(1) end AS SITE5,
case when name = 'SITE6' then count(1) end AS SITE6,
case when name = 'SITE7' then count(1) end AS SITE7,
case when name = 'SITE8' then count(1) end AS SITE8,
case when name = 'SITE9' then count(1) end AS SITE9,
from
(
select total.createdate as createdate ,total.name as name from
(
select distinct dtr.* , ps.name ,DATE_FORMAT(dt.create_time,'%Y-%m-%d') as createdate from di_dtb_task_result dtr
inner join di_dtb_task_data_detail dt
on dtr.task_id = dt.task_id and dt.user_id <> 10000001
left join dtb_user_info ui
on ui.id = dt.user_id and dtr.task_id = dt.task_id
left join dtb_point_site ps
on ps.id=ui.user_point_site_id and dtr.task_id = dt.task_id
where dtr.status <> 9
-- group by dtr.status ,dtr.task_id , ui.id,ui.user_point_site_id , ps.name
order by dtr.task_id
) total
-- group by total.name , total.createdate
) alldata
group by alldata.createdate ,alldata.name
最简单的解决方案:
只需通过sql包装您的sql来添加另一个组
select alldata.createdate, sum(SITE1), sum(SITE2), sum(SITE3), sum(SITE4), sum(SITE5), sum(SITE6), sum(SITE7), sum(SITE8), sum(SITE9)
// inner select
group by alldata.createdate
我想你可能想试试max函数
select createdate, max(site1),max(site2),max(site3),max(site4),max(site5),max(site6),max(site7), max(site8),max(site9) from (..your_inner_query..) group by createdate
这里有一个示例供您参考请向我们展示您的查询并正确说明您想要做什么,这里似乎您的分组子句有问题,因为创建日期2014年2月10日出现了两次。这意味着在我的情况下它是不正确的。创建日期SITE1 SITE2 SITE3 SITE4 SITE5 SITE6 SITE7 SITE8 SITE9 2014年2月10日73 NULL NULL NULL NULL你能澄清原因吗?都德,它只是将2014年10月2日的所有记录相加。不要逐个站点显示。sqlfiddle中显示的结果就是您要求的结果。怎么了?Pl提供详细信息和细节。bro站点字段为字符串字段。