有一张表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发表了的话问题就出来了。所求的数据集中只有今天发表过的数据。
我现在想得到的就是数据集中不管今天有没有发帖,都给列出来,如果没有发帖的话就显示为零。请高手帮忙~~~~~
现在我想得到每个论坛分类中今天发表的帖子数量。我所用到的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发表了的话问题就出来了。所求的数据集中只有今天发表过的数据。
我现在想得到的就是数据集中不管今天有没有发帖,都给列出来,如果没有发帖的话就显示为零。请高手帮忙~~~~~
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
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
*/
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
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"