有一张表t_bbs,其中包含帖子编号forum_id(pk),发帖日期forum_date,帖子的分类menu_id(fk)。(帖子分类是指该贴属于哪个区,例如有可能是电影类的,或者是电视剧类的,也有可能是综艺节目的。类似于这种)
现在我想得到每个论坛分类中今天发表的帖子数量。我所用到的sql语句是这样的select menu_id,count(forum_id) as MenuSmall_ToDayPostCount from t_bbs where forum_date >'" + DateTime.Today + "'group by menu_id order by menu_id"
如果每个分类今天都发表过帖子那就没问题,但是问题在于有的时候并不是所有的分类都发表过帖子的呀假设menu_id一共有9个记录,从1到9。。如果1、2、3今天发表了帖子、4、5、6今天没发表、而7、8、9发表了的话问题就出来了。所求的数据集中只有今天发表过的数据。
我现在想得到的就是数据集中不管今天有没有发帖,都给列出来,如果没有发帖的话就显示为零。请高手帮忙~~~~~

解决方案 »

  1.   


    select menu_id,isnull(MenuSmall_ToDayPostCount,0)MenuSmall_ToDayPostCount  from 
    (select distinct menu_id from MenuSmall_ToDayPostCount) a 
    left join (select menu_id,count(forum_id) as MenuSmall_ToDayPostCount 
    from t_bbs where forum_date >'" + DateTime.Today + "'group by menu_id order by menu_id) as b on a.menu_id=b.menu_id
      

  2.   

    与一个分类列表右联就可以了
    IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB(COL1 VARCHAR(10),COL2 INT)
    INSERT INTO TB
    SELECT 'A',1 UNION ALL
    SELECT 'A',2 UNION ALL
    SELECT 'C',3SELECT T2.COL1,COUNT(T1.COL2)
    FROM TB T1
    RIGHT JOIN (
    SELECT 'A' AS COL1 UNION ALL
    SELECT 'B' UNION ALL
    SELECT 'C'
    ) T2 ON T1.COL1=T2.COL1
    GROUP BY T2.COL1
    /*
    A 2
    B 0
    C 1
    */
      

  3.   

    若有一个基础表是关于贴子分类的表的话,就更好了,直接替代语句(select distinct menu_id from MenuSmall_ToDayPostCount)相对程序的效率也会很高
      

  4.   

    select b.menu_id,MenuSmall_ToDayPostCount=isnull(aa,0)
    from (
    select menu_id,count(forum_id) as aa
    from t_bbs 
    where datediff(day,forum_date,getdate())
    group by menu_id )a
    right join (select distinct menu_id from t_bbs) b
    on a.menu_id=b.menu_id
    order by menu_id 
      

  5.   

    你应该还有 menu 表select a.menu_id,count(a.forum_id) as MenuSmall_ToDayPostCount 
    from menu a left join t_bbs b on a.menu_id=b.menu_id
    where forum_date >'" + DateTime.Today + "'
    group by a.menu_id order by a.menu_id"