解决方案 »
- sqlserver 表连接时使用top 1去除重复记录
- nvarchar(50) 插入空值,再提出来就出现&或nbsp;
- SQL 转化txt出问题 -------一定给分
- 如何只读取字段前几位
- 为什么在企业管理器里看不到xp_cmdshell却还可以用它呀?
- 数据转换时报错:Error converting data type varchar to numeric.
- 感谢邹建建议; 但数据库质疑 通过以下方法还是出错问题 ……急!!!!
- 求一答案,不胜感谢!!
- SQL没想出来
- 学习sql server 2000应该学什么?欢迎讨论,进者有分
- SQL2005服务器无法用SQL验证登录
- 安装时,提示INSTALLSHAREDWOWDIR命令行值无效
declare @tb table(id int,newsid int, parentid int)
insert into @tb
select 1,12,0 union all
select 2,12,1 union all
select 3,12,1 union all
select 4,12,2 union all
select 5,12,0 union all
select 6,12,0 union all
select 7,12,0;
with cte as (
select * from @tb where id=1
union all
select t1.* from @tb t1 join cte t2 on t1.parentid=t2.id
)select * from cte
1 12 0
2 12 1
3 12 1
4 12 2
5 12 0
6 12 0
7 12 0 就是一个评论表 ,newsid 代表新闻id
根据新闻ID 获取结果
1 12 0
2 12 1
3 12 1
4 12 2
create table test(id int,newsid int, parentid int)
insert test
select 1,12,0 union all
select 2,12,1 union all
select 3,12,1 union all
select 4,12,2 union all
select 5,12,0 union all
select 6,12,0 union all
select 7,12,0select id=MIN(id),newsid,parentid
from test
where parentid=0 and newsid=12
group by newsid,parentid
union all
select id,newsid,parentid
from test
where parentid<>0 and newsid=12/*
1 12 0
2 12 1
3 12 1
4 12 2
*/
id newsid parentid
2 12 1
3 12 1
4 12 2
5 12 0
6 12 5
7 12 0
那么你的sql语句获取的结果是
1 12 0
2 12 1
3 12 1
4 12 2
6 12 5
id newsid parentid
1 12 0
2 12 1
3 12 1
4 12 2
5 12 0
6 12 5
7 12 0
我只想要结果
1 12 0
2 12 1
3 12 1
4 12 2
order by id
if object_id('Tempdb..#news') is not null drop table #news
if object_id('Tempdb..#comment') is not null drop table #commentcreate table #news(
NId int identity(1,1) not null,
NTitle nvarchar(100) null
)create table #comment(
CId int identity(1,1) not null,
CNId int null,
Ccontent nvarchar(max) null
)
Insert Into #news
select '第 1 条新闻' union all
select '第 2 条新闻' union all
select '第 3 条新闻' union all
select '第 4 条新闻' union all
select '第 5 条新闻'
Insert Into #comment
select 1,'第1条新闻的 第 1 条评论' union all
select 1,'第1条新闻的 第 2 条评论' union all
select 1,'第1条新闻的 第 3 条评论' union all
select 1,'第1条新闻的 第 4 条评论' union all
select 1,'第1条新闻的 第 5 条评论' union all
select 2,'第2条新闻的 第 1 条评论' union all
select 2,'第2条新闻的 第 2 条评论' union all
select 2,'第2条新闻的 第 3 条评论' union all
select 2,'第2条新闻的 第 4 条评论' union all
select 2,'第2条新闻的 第 5 条评论' union all
select 2,'第2条新闻的 第 6 条评论' union all
select 2,'第2条新闻的 第 7 条评论' union all
select 2,'第2条新闻的 第 8 条评论' union all
select 3,'第3条新闻的 第 1 条评论' union all
select 3,'第3条新闻的 第 2 条评论' union all
select 1,'第1条新闻的 第 6 条评论' union all
select 1,'第1条新闻的 第 7 条评论' union all
select 1,'第1条新闻的 第 8 条评论' union all
select 1,'第1条新闻的 第 9 条评论' union all
select 1,'第1条新闻的 第 10 条评论' union all
select 2,'第2条新闻的 第 9 条评论' union all
select 2,'第2条新闻的 第 10 条评论' union all
select 2,'第2条新闻的 第 11 条评论' union all
select 2,'第2条新闻的 第 12 条评论' union all
select 2,'第2条新闻的 第 13 条评论' union all
select 4,'第4条新闻的 第 1 条评论' union all
select 5,'第5条新闻的 第 1 条评论' union all
select 3,'第3条新闻的 第 3 条评论' union all
select 5,'第5条新闻的 第 2 条评论' union all
select 5,'第5条新闻的 第 3 条评论' declare @n int
set @n=6
;with cte as(
select *, row_number() over(partition by CNId order by CId) rid from #comment
)select * from #news join cte on NId=CNId
where rid<=@n
--------------------------
--结果(5 行受影响)(30 行受影响)
NId NTitle CId CNId Ccontent rid
----------- ---------------------------------------------------------------------------------------------------- ----------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------
1 第 1 条新闻 1 1 第1条新闻的 第 1 条评论 1
1 第 1 条新闻 2 1 第1条新闻的 第 2 条评论 2
1 第 1 条新闻 3 1 第1条新闻的 第 3 条评论 3
1 第 1 条新闻 4 1 第1条新闻的 第 4 条评论 4
1 第 1 条新闻 5 1 第1条新闻的 第 5 条评论 5
1 第 1 条新闻 16 1 第1条新闻的 第 6 条评论 6
2 第 2 条新闻 6 2 第2条新闻的 第 1 条评论 1
2 第 2 条新闻 7 2 第2条新闻的 第 2 条评论 2
2 第 2 条新闻 8 2 第2条新闻的 第 3 条评论 3
2 第 2 条新闻 9 2 第2条新闻的 第 4 条评论 4
2 第 2 条新闻 10 2 第2条新闻的 第 5 条评论 5
2 第 2 条新闻 11 2 第2条新闻的 第 6 条评论 6
3 第 3 条新闻 14 3 第3条新闻的 第 1 条评论 1
3 第 3 条新闻 15 3 第3条新闻的 第 2 条评论 2
3 第 3 条新闻 28 3 第3条新闻的 第 3 条评论 3
4 第 4 条新闻 26 4 第4条新闻的 第 1 条评论 1
5 第 5 条新闻 27 5 第5条新闻的 第 1 条评论 1
5 第 5 条新闻 29 5 第5条新闻的 第 2 条评论 2
5 第 5 条新闻 30 5 第5条新闻的 第 3 条评论 3(19 行受影响)