union排序的问题

u011095570 2013-06-17 07:32:41
在一个视图里用了union 在首页显示前几条出来 每个分类都按照最新的时间排序

如下:
select top 10 id,title,time,kid from News where kid = 1 ORDER BY time DESC
UNION
select top 6 id,title,time,kid from News where kid = 5 ORDER BY time DESC
UNION
select top 8 id,title,time,kid from News where kid = 3 ORDER BY time DESC
UNION
select top 8 id,title,time,kid from News where kid = 7 ORDER BY time DESC
UNION
select top 6 id,title,time,kid from News where kid = 6 ORDER BY time DESC
UNION
select top 10 id,title,time,kid from News where kid = 2 ORDER BY time DESC


单个语句的话 按最新时间排序是没问题的 可是这6个合起来 就不对了

帮帮忙 谢谢了
...全文
384 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
白云任去留 2013-06-17
  • 打赏
  • 举报
回复
9楼的按说是没有问题的!
水猿兵团五哥 2013-06-17
  • 打赏
  • 举报
回复
引用 15 楼 Chinajiyong 的回复:
[quote=引用 13 楼 Chinajiyong 的回复:] [quote=引用 12 楼 u011095570 的回复:] 试过了,9、10楼的方法不行。 查询结果、每个分类下、显示的不是按时间排序最新的几条。 搞不明白 ,每个分类下都 order by 了,为什么显示的不是每个分类下最新的几条。
union 会自动按升序排序[/quote] 用union all可以实现,但是会产生重复数据[/quote] UNION ALL 就可以了 重复数据是否会产生那是跟他select出来的结果有关
u011095570 2013-06-17
  • 打赏
  • 举报
回复
也许跟我用的数据库有关系。 我把每个语句外面都放一个select就可以实现我想要的效果了,可是老觉得这样不太好。 中午回去按你的方法,试下mssql 谢谢版主了,也谢谢楼上回复的几位。 下午看看无回复的就结贴,再次感谢。
EnForGrass 2013-06-17
  • 打赏
  • 举报
回复
引用 13 楼 Chinajiyong 的回复:
[quote=引用 12 楼 u011095570 的回复:] 试过了,9、10楼的方法不行。 查询结果、每个分类下、显示的不是按时间排序最新的几条。 搞不明白 ,每个分类下都 order by 了,为什么显示的不是每个分类下最新的几条。
union 会自动按升序排序[/quote] 用union all可以实现,但是会产生重复数据
ltcszk 2013-06-17
  • 打赏
  • 举报
回复
改用UNION ALL
EnForGrass 2013-06-17
  • 打赏
  • 举报
回复
引用 12 楼 u011095570 的回复:
试过了,9、10楼的方法不行。 查询结果、每个分类下、显示的不是按时间排序最新的几条。 搞不明白 ,每个分类下都 order by 了,为什么显示的不是每个分类下最新的几条。
union 会自动按升序排序
u011095570 2013-06-17
  • 打赏
  • 举报
回复
试过了,9、10楼的方法不行。 查询结果、每个分类下、显示的不是按时间排序最新的几条。 搞不明白 ,每个分类下都 order by 了,为什么显示的不是每个分类下最新的几条。
joyhen 2013-06-17
  • 打赏
  • 举报
回复
引用 8 楼 u011095570 的回复:
[quote=引用 1 楼 xdf008 的回复:] 建个表变量啊,先都插进去,然后再select order by
能给个代码吗?[/quote]看10楼的,就是这样子
EnForGrass 2013-06-17
  • 打赏
  • 举报
回复
你需要再对union之后的查询结果在排序。


select b.* from 
(
select top 10 id,title,time,kid from News where kid = 1 ORDER BY time DESC
UNION 
select top 6 id,title,time,kid from News where kid = 5 ORDER BY time DESC
UNION 
select top 8 id,title,time,kid from News where kid = 3 ORDER BY time DESC
UNION 
select top 8 id,title,time,kid from News where kid = 7 ORDER BY time DESC
UNION 
select top 6 id,title,time,kid from News where kid = 6 ORDER BY time DESC
UNION 
select top 10 id,title,time,kid from News where kid = 2 ORDER BY time DESC
) b order by b.time desc
tptptp00 2013-06-17
  • 打赏
  • 举报
回复
select * from ( select top 10 id,title,time,kid from News where kid = 1 UNION select top 6 id,title,time,kid from News where kid = 5 UNION select top 8 id,title,time,kid from News where kid = 3 UNION select top 8 id,title,time,kid from News where kid = 7 UNION select top 6 id,title,time,kid from News where kid = 6 UNION select top 10 id,title,time,kid from News where kid = 2 ) ORDER BY time DESC 你是相对整体排序吧
u011095570 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 xdf008 的回复:
建个表变量啊,先都插进去,然后再select order by
能给个代码吗?
u011095570 2013-06-17
  • 打赏
  • 举报
回复
引用 4 楼 Joyhen 的回复:
在这个SQL语句的外面套一个select * from 你的union集合 order by time desc
你好,这样试过了,效果一样,不行。
u011095570 2013-06-17
  • 打赏
  • 举报
回复
引用 3 楼 cnceohjm 的回复:
楼主是想要kid = 1 前10条(按时间降序)后门进跟着kid=5的前6条(按时间降序)……?这样显示吗?
是的
Change_L 2013-06-17
  • 打赏
  • 举报
回复
能实现吗?
joyhen 2013-06-17
  • 打赏
  • 举报
回复
在这个SQL语句的外面套一个select * from 你的union集合 order by time desc
H_Gragon 2013-06-17
  • 打赏
  • 举报
回复
楼主是想要kid = 1 前10条(按时间降序)后门进跟着kid=5的前6条(按时间降序)……?这样显示吗?
xdf008 2013-06-17
  • 打赏
  • 举报
回复
也可以外面使用时order by,.net的linq
xdf008 2013-06-17
  • 打赏
  • 举报
回复
建个表变量啊,先都插进去,然后再select order by

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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