mysql水平显示结果

时间:2014-10-10 07:50:21

标签: 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    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

注意:我已经对SITE NAME进行了分组并创建了。

你有什么好主意或某些人建议我......

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

2 个答案:

答案 0 :(得分:0)

最简单的解决方案:

只需通过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

答案 1 :(得分:0)

我想你可能想尝试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

在这里,您可以使用示例sqlfiddle作为参考