ORDER BY 的简单用法太不给力了,求高级的排序

abc_zxc123 2012-07-27 10:51:12
单号 合同号 工厂号 面料123 合计
0725-531 307021 TB22116-82 绿色 4
0725-532 307021 TB22116-82 土黄 5
0725-533 307021 TB22111-89 兰色 10
0725-534 307021 TB22111-89 黑色 9
0725-535 307021 TB2207-97 米色 6
0725-536 307021 TB2207-97 兰色 6
0725-537 307021 TB2202-97 米色 90
0725-538 307021 TB2202-97 绿色 30
0725-539 307021 TB2202-97 黑色 180
0725-540 307021 TB2258-81 土黄 240
0725-541 307021 TB2258-81 桔色 180
0725-542 307021 TB2207-97 米色 240
0725-543 307021 TB2207-97 兰色 240
0725-544 307022 TB2258-81 绿色 60
0725-545 307022 TB2258-81 土黄 120
0725-546 307022 TB2258-81 桔色 120
0725-556 307005 TB2205-68 红色 60
0725-557 307005 TB2205-68 兰色 60
0725-558 307006 TB2258-81 桔色 60
0725-559 307006 TB2258-81 土黄 90
0725-560 307006 TB2258-81 黑色 120
0725-561 307007 TB22116-82 绿色 90
0725-562 307007 TB22116-82 土黄 90
0725-563 307007 TB22116-82 黑色 120
我想让:首先单号排序,当后面有工厂号和此单号的工厂号一样时,就把此行
拉到前面来,即
单号 合同号 工厂号 面料123 合计
0725-531 307021 TB22116-82 绿色 4
0725-532 307021 TB22116-82 土黄 5
0725-561 307007 TB22116-82 绿色 90
0725-562 307007 TB22116-82 土黄 90
0725-563 307007 TB22116-82 黑色 120
0725-533 307021 TB22111-89 兰色 10
0725-534 307021 TB22111-89 黑色 9
0725-535 307021 TB2207-97 米色 6
0725-536 307021 TB2207-97 兰色 6
0725-537 307021 TB2202-97 米色 90
0725-538 307021 TB2202-97 绿色 30
0725-539 307021 TB2202-97 黑色 180
0725-542 307021 TB2207-97 米色 240
0725-543 307021 TB2207-97 兰色 240
0725-540 307021 TB2258-81 土黄 240
0725-541 307021 TB2258-81 桔色 180
0725-544 307022 TB2258-81 绿色 60
0725-545 307022 TB2258-81 土黄 120
0725-546 307022 TB2258-81 桔色 120
0725-558 307006 TB2258-81 桔色 60
0725-559 307006 TB2258-81 土黄 90
0725-560 307006 TB2258-81 黑色 120
0725-556 307005 TB2205-68 红色 60
0725-557 307005 TB2205-68 兰色 60

不知道此时的ORDER BY 怎么写啊,或者有什么其它的办法吗
...全文
419 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2012-07-28
  • 打赏
  • 举报
回复
【首先单号排序,当后面有工厂号和此单号的工厂号一样时,就把此行
拉到前面来】

a记录后面有b、c记录的工厂号和a单号的工厂号一样
也意味着
b记录后面有a、c记录的工厂号和b单号的工厂号一样
c记录后面有b、a记录的工厂号和c单号的工厂号一样
那a、b、c都可以拉到前面了
cxmcxm 2012-07-28
  • 打赏
  • 举报
回复
加一个分组连接

--单号 合同号 工厂号 面料123 合计
select a.* from tb a,(select 工厂号,min(单号) as 单号 from tb group by 工厂号) as b where a.工厂号=b.工厂号 order by b.单号,a.工厂号,a.单号

杰拉尔 2012-07-28
  • 打赏
  • 举报
回复
ORDER BY
when case可用
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
能不能帮我写到一个复合的Select 语句中
我急着要写到VB里面的,谢谢大虾
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
说得有道理
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复

先按单号排序,判断如果后面有这个工厂号拉到前面来
理想的是这样的:(按单号分组,其中组里面第一个单号,按顺序排列)
group by 工厂号
order by 单号
上面语句group by肯定会有错误

还是不行啊
AcHerat 2012-07-27
  • 打赏
  • 举报
回复
如果要指定工厂号的顺序,那么楼主还需要自己去建一个表或临时表,来把工厂号的顺序指定下。


;with cte as
(
select 'A1' as 工厂号,1 as orderflag union all
select 'A2',2
)

select a.*
from tb a join cte b on a.工厂号 = b.工厂号
order by b.orderflag,a.单号
icebbb34 2012-07-27
  • 打赏
  • 举报
回复
select * from tb order by 工厂号 desc,单号
老白猫 2012-07-27
  • 打赏
  • 举报
回复
你试试不久知道行不行了 不行再继续研究呗
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
不知道ORDER BY
WHEN CASE 好象不行
怎么弄游标,先按单号排序,判断如果后面有这个工厂号拉到前面来
老白猫 2012-07-27
  • 打赏
  • 举报
回复
group by 工厂号
order by 单号
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
不知道ORDER BY
WHEN CASE 好象不行
怎么弄游标,先按单号排序,判断如果后面有这个型体拉到前面来
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
这样的花,不把TB2207-97排到前面去了吗
--小F-- 2012-07-27
  • 打赏
  • 举报
回复
select * from tb order by 工厂号,单号
AcHerat 2012-07-27
  • 打赏
  • 举报
回复

order by 工厂号,单号
abc_zxc123 2012-07-27
  • 打赏
  • 举报
回复
我在,相当于在SQL 环境里面,即VBA操作
大哥大姐们,帮帮我哇,SQL 初学者啊
我急用,帮我写全点啊,
只要SQL server运行通过就行了哇
ljr_aa 2012-07-27
  • 打赏
  • 举报
回复
可以按需插入临时表,临时表增加一个自动ID,seqNo int IDENTITY (1, 1),最后按此SeqNo排序就好了。

22,209

社区成员

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

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