日期:2014-05-17  浏览次数:20565 次

sql 查询语句。

CREATE TABLE [ExpertReply](
    [ID] [int] NOT NULL,
    [UserID] [int] NOT NULL,
    [BlogID] [int] NOT NULL,
    [CommentID] [int] NOT NULL,
    [Context] [nvarchar](max) NULL,
    [CreateTime] [datetime] NOT NULL,
)
 

 
insert ExpertReply values(1, 1, 1, 0, '回复1', GETDATE())
insert ExpertReply values(2, 2, 1, 0, '回复2', GETDATE())
insert ExpertReply values(3, 3, 1, 0, '回复3',  GETDATE())
insert ExpertReply values(4, 4, 1, 2, '评论1',  GETDATE())
insert ExpertReply values(5, 3, 1, 3, '评论3',  GETDATE())
insert ExpertReply values(6, 2, 1, 2, '评论2',  GETDATE())
insert ExpertReply values(7, 3, 1, 3, '评论4',  GETDATE())

想要的效果是:如果这条回复有评论,那么下一条数据就是他的评论
例如:
回复1
回复2
评论1
评论2
回复3
评论3
评论4
回复4
.....

下面的这条语句效果不太理想,有朋友能帮忙修改,或者提出更好的方法么?

select * from ExpertReply order by case when CommentID!=0 then CommentID else id end

------解决方案--------------------

with tb as(select id,commentid=id,context from  [ExpertReply] where  commentid=0
union all
select  a.id,tb.commentid,a.context   from tb,[ExpertReply] a where tb.id=a.commentid
)
select context from tb
order by commentid,id


这样OK吗?
------解决方案--------------------
--CREATE TABLE [ExpertReply]( 
--    [ID] [int] NOT NULL, 
--    [UserID] [int] NOT NULL, 
--    [BlogID] [int] NOT NULL, 
--    [CommentID] [int] NOT NULL, 
--    [Context] [nvarchar](max) NULL, 
--    [CreateTime] [datetime] NOT NULL, 
--) 
   
  
   
--insert ExpertReply values(1, 1, 1, 0, '回复1', GETDATE()) 
--insert ExpertReply values(2, 2, 1, 0, '回复2', GETDATE()) 
--insert ExpertReply values(3, 3, 1, 0, '回复3',  GETDATE()) 
--insert ExpertReply values(4, 4, 1, 2, '评论1',  GETDATE()) 
--insert ExpertReply values(5, 3, 1, 3, '评论3',  GETDATE()) 
--insert ExpertReply values(6, 2, 1, 2, '评论2',  GETDATE()) 
----insert ExpertReply values(7, 3, 1, 3, '评论4',&nb