关于SQL数据分组排序的问题

weixin_41349545 2018-07-09 12:30:43
有一个数据库分组排序的问题。
序号 人名 事件 回复状态
1 张三 事件1 未回复
1 张三 事件2 已回复
1 张三 事件3 未回复
2 李四 事件4 未回复
2 李四 事件5 未回复
2 李四 事件6 已回复

现在想实现以下显示(即首先按照序号最小的排在前面,并且未回复的排在上面,已回复排在下面,效果如下如何实现)
序号 人名 事件 回复状态
1 张三 事件1 未回复
1 张三 事件3 未回复
1 张三 事件2 已回复
2 李四 事件4 未回复
2 李四 事件5 未回复
2 李四 事件6 已回复
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiashanpo 2019-05-29
  • 打赏
  • 举报
回复
想要1 张三 2 李四 1 张三 2 李四
powerat123 2018-07-09
  • 打赏
  • 举报
回复
select * from table
order by 序号(人名?),回复状态
回复状态如果是已回复在前面,加一个 desc就行了,
如果回复状态有多个(大于3个),而未回复在中间不在两边,那么在包一层
select * from (
select case when 回复状态='未回复' then 0
case when 回复状态='已回复' then 1
case when .....
else 99 end as state,
*
) as a
order by a.序号,事件,a.state asc
二月十六 版主 2018-07-09
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([序号] int,[人名] nvarchar(22),[事件] nvarchar(23),[回复状态] nvarchar(23))
Insert #T
select 1,N'张三',N'事件1',N'未回复' union all
select 1,N'张三',N'事件2',N'已回复' union all
select 1,N'张三',N'事件3',N'未回复' union all
select 2,N'李四',N'事件4',N'未回复' union all
select 2,N'李四',N'事件5',N'未回复' union all
select 2,N'李四',N'事件6',N'已回复'
Go
--测试数据结束
Select * from #T ORDER BY 序号,CASE WHEN 回复状态='未回复' THEN 1 ELSE 2 END,事件


RINK_1 2018-07-09
  • 打赏
  • 举报
回复

select * from table
order by 序号,case when 回复状态='未回复' then 0 else 1 end
shinger126 2018-07-09
  • 打赏
  • 举报
回复
select * from table order by 序号,case when 回复状态='未回复' then 1 else 2 end,事件

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧