我想用某一个字段a排序,但是我的SQL语句包含distinct,在distinct的时候不想把字段a给列进去

lhnlyy520 2012-01-11 11:36:05
sqlserver:SQL语句
我想用某一个字段a排序,也就是order by a
但是我的SQL语句包含distinct,在distinct的时候不想把字段a给列进去。
应该怎么实现。
语句如下:
select distinct b,c from table order by a desc(这样肯定会报错的,因为a在order by 里,而且语句还包含distince,a就必须出现在select中)
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgm881218 2013-12-16
  • 打赏
  • 举报
回复
版主真厉害,谢谢你帮我解决了问题
叶子 2012-01-11
  • 打赏
  • 举报
回复

declare @t table (b int,c int,a int)
insert into @t
select 1,1,4 union all
select 1,1,2 union all
select 2,2,3 union all
select 3,3,6 union all
select 2,2,5 union all
select 3,3,1
--按相同b,c对应的最小a排序
SELECT b,c from @t GROUP BY b,c ORDER BY MIN(a)
/*
b c
----------- -----------
3 3
1 1
2 2
*/
--按相同b,c对应的最大a排序
SELECT b,c from @t GROUP BY b,c ORDER BY max(a)
/*
b c
----------- -----------
1 1
2 2
3 3
*/
--按相同b,c对应的平均a排序
SELECT b,c from @t GROUP BY b,c ORDER BY avg(a)
/*
b c
----------- -----------
1 1
3 3
2 2
*/
叶子 2012-01-11
  • 打赏
  • 举报
回复

declare @t table (b int,c int,a int)
insert into @t
select 1,1,4 union all
select 1,1,2 union all
select 2,2,3 union all
select 3,3,6 union all
select 2,2,5 union all
select 3,3,1

SELECT distinct b,c from @t
/*
b c
----------- -----------
1 1
2 2
3 3
*/

告诉我你想要什么样的结果?
叶子 2012-01-11
  • 打赏
  • 举报
回复
根据b,c过滤重复,那么相同的bc 可能对应不同的a ,你打算怎么排序呢?
AcHerat 2012-01-11
  • 打赏
  • 举报
回复

select b,c,min(a) a
from tb
group by b,c
order by a desc
水族杰纶 2012-01-11
  • 打赏
  • 举报
回复
没办法
SQL77 2012-01-11
  • 打赏
  • 举报
回复
SELECT B,C FROM TB GROUP BY B,C ORDER BY MIN(A)

TRY
勿勿 2012-01-11
  • 打赏
  • 举报
回复
再在外面搞个查询不就好了吗?
Leon_He2014 2012-01-11
  • 打赏
  • 举报
回复
楼主你这个排序逻辑是不符合sql语法的。
根据sql的执行顺序,order by 是最后执行。
在order by 之前就根据select 筛选出了最后的列。
如果select 中没有a列,则order by 中是访问不到的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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