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

mssql 先按某列分组 然后按时间排序 急啊



需要达到的目的是 bbsanswerbatchid 这列值相同的排在一起 然后按时间升序排序

------解决方案--------------------
那不是
select* from tablename
 order by bbsanswerbatchid ,bbs…***time
------解决方案--------------------
select *
from tb
order by bbsanswerbatchid ,bbsanswersendtime
------解决方案--------------------
你这个数据列bbsanswerbatchid就象NEWID()一样,应该是没有相同的数据吧?看你的要求好象没有什么特殊的呢
------解决方案--------------------
第一行跟第三个就是重复的,倒数第二个跟倒数第四个也是一样的
应该是个字表,有对应的主表的ID是唯一的吧
------解决方案--------------------
引用:
Quote: 引用:

你这个数据列bbsanswerbatchid就象NEWID()一样,应该是没有相同的数据吧?看你的要求好象没有什么特殊的呢


bbsanswerbatchid 有相同的数据

看到了,就按照二楼的语句排序可以达到你的要求
------解决方案--------------------
SELECT *
FROM tabl
ORDER BY bbsanswerbatchid ,bbsanswersendtime
 
order by先排序第一列,也就是bbsanswerbatchid ,如果bbsanswerbatchid 相同,再排序bbsanswersendtime,asc是默认,不需要写出来,就是升序,如果bbsanswerbatchid 需要降序,可以加bbsanswerbatchid  desc这样写法
------解决方案--------------------
引用:
如果 前面的那列值不一样的时候 优先按时间排序, 
这样分开说  先把前面那列值相同的数据 列出来 排序后 然后按照时间排序 +  前面那列值不同的数据 按照时间排序 这2个集合合起来 就是最纵结果! 
 用程序怎么表达
bbsanswerbatchid 这个值先排序,对于bbsanswerbatchid 相同的,才按日期排序,否则还是先按bbsanswerbatchid 排序
------解决方案--------------------
引用:



需要达到的目的是 bbsanswerbatchid 这列值相同的排在一起 然后按时间升序排序


你要的是这样的吧,如果bbsanswerbatchid 是相同的,先排前面,如果是单个的,这些单个的都按照时间来排序:

select bbsanswerbatchid,bbsanswersendtime
from
(
SELECT *,
       case when (count(*) over(partition by bbsanswerbatchid)) > 1
                 then 1
            else 0
       end as bbsanswerbatchid_flag
FROM tabl 
)t
ORDER BY bbsanswerbatchid_flag desc,bbsanswersendtime


------解决方案--------------------
我试了一下,应该是可以的:


;with tabl(bbsanswerbatchid,bbsanswersendtime)
as
(
select 'abc','2013-01-09' union all
select 'abc','2013-01-10' union all
select 'def','2013-09-01' union all
select 'fgh','2013-09-10'
)

select bbsanswerbatchid,bbsanswersendtime
from
(
SELECT *,
&nb