有一个表,是记录访客动作的。表jilu的设计如下(作用,记录文章阅读的访客信息和次数用于排序)
id, int
sid, int,
tn,varchar 值可以是unti ,ding,not,hit四种中的一个
date,intid,sid,tn,date
10,10,not,1234567890
11,21,ding,2134569870
25,30,unti,2315698740=============================================================
现在要做的就是,数出sid值相同,tn值相同的总数目 以tn的值来命名,
生成对应的表jilu_temp
表记录中的结果如下id,sid,not,unti,ding,hit
10,10,12,102,0,1023,120(例如这个值)
--------------------
这样可能吗?怎么写啊?SQL语句是怎么样的啊?

解决方案 »

  1.   

    不是很明白你要生成的表的条件是什么。但是可以用create table jilu_temp as (select id,sid,not unti,din,hit from ..。就是你要查询的结果);这样可以把查询的结果创建生成一张表字段名可以自己用as 改。没看懂你要做什么。不过查询语句你应该有了吧。
      

  2.   

    很经典的行列转换问题:
    试下:
    select sid,
           sum(if(tn='not',1,0)) as `not`,
           sum(if(tn='unit',1,0)) as unit,
           sum(if(tn='ding',1,0)) as ding,
           sum(if(tn='hit',1,0)) as hit
    from jilu
    group by sid 
    order by sid;
      

  3.   

    如果你要生成jilu_temp 临时表来存放,则这样:create temporary table jilu_temp
    as
    select sid, 
          sum(if(tn='not',1,0)) as `not`, 
          sum(if(tn='unit',1,0)) as unit, 
          sum(if(tn='ding',1,0)) as ding, 
          sum(if(tn='hit',1,0)) as hit 
    from jilu 
    group by sid 
    order by sid; 
      

  4.   


    太佩服了。真的太感激了。
    ====================================================但是还有一个我想问下。
    表jilu中的设计是
    id,tn,sid,date我想分段选出怎么弄呢?
    (分段选出
    date值在昨日内的tn==hit 成为yes_hit,
    date值在昨日内的t==ding 成为yes_ding,
    date值在昨日内的tn==unti 成为yes_tn,
    date值在本月内的tn==unti成为 mon_unti,
    date值在本年内的tn==unti 成为year_unti
    )形成这个表这样又如何写啊?date 的值是来自time()格式的,10位。
      

  5.   

    、、、、、、、、、、、、、、、
    怎么不回答一下啊。
    后来我用了另外一个句子了。
    这个创建临时表的不能用的。而且即使是创建表,但是竟然不能join ,当另外一个表和他left join的时候就不行。
    后来我用了select (select from where ) as 了。但是另外的一个问题也帮我解决下啊,大侠~~~
      

  6.   

    问题说明越详细,回答也会越准确!参见如何提问。
    http://community.csdn.net/IndexPage/SmartQuestion.aspx 提问的智慧 建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。