order by 的难度???

samyou 2011-03-30 10:52:31
A表:
ID TYPE
1 好
2 中
3 差
B表:
ID NAME TYPEID
1 张1 1
2 张2 1
3 李1 3
4 李2 2
5 李3 2

现在想B表一定要按照A表中字段TYPE按照一定顺序进行排序,例如一定要将“差”排在先,跟着“中”。
有没有好的办法,ORDER BY 可以吗?
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cutebear2008 2011-03-30
  • 打赏
  • 举报
回复
排序的话一般都是要排序规则的啊,如果你这里的‘好’,‘中’,‘差’变成更多个的话,那就麻烦了!
不管怎么排都是很麻烦吧!所以啊还在在程序后面代码实现比较好!^_^
[Quote=引用 8 楼 samyou 的回复:]
多谢cutebear2008给了个思路,效果可以达到,但SQL 是否复杂了些?而且扩展性不太好
[/Quote]
samyou 2011-03-30
  • 打赏
  • 举报
回复
多谢cutebear2008给了个思路,效果可以达到,但SQL 是否复杂了些?而且扩展性不太好
andysun88 2011-03-30
  • 打赏
  • 举报
回复


--给你参考,按给定的姓名排序
if object_id('test1') is not null drop table test1
create table test1
(姓名 varchar(50))

insert into test1
select '陈太花' union all
select '王伟梁' union all
select '陈菊芳' union all
select '张静' union all
select '徐俭' union all
select '陈敏' union all
select '陈淑琴' union all
select '李文花' union all
select '谢丽萍' union all
select '许惠瑛' union all
select '周季俞' union all
select '张燕' union all
select '陆军' union all
select '盛春芳' union all
select '陈家贵' union all
select '徐渭' union all
select '李玉华' union all
select '陆玲娣' union all
select '鲁春娟' union all
select '赵亮'


select * from test1
order by charindex(','+姓名+',',',陈太花,王伟梁,陈菊芳,张静,徐俭,陈敏,陈淑琴,李文花,谢丽萍,许惠瑛,周季俞,张燕,陆军,盛春芳,陈家贵,李玉华,陆玲娣,鲁春娟,赵亮,徐渭,')

cutebear2008 2011-03-30
  • 打赏
  • 举报
回复
这个有什么区别啊!
在前面接受用户输入类别,根据排序类别选择SQL语句不久行了!


CREATE PROCEDURE p1
@type int
AS
BEGIN
IF(@type=1)
BEGIN
SELECT * FROM B WHERE typeID=1
UNION ALL
SELECT * FROM B WHERE typeID=2
UNION ALL
SELECT * FROM B WHERE typeID=3
END
ELSE IF(@type=2)
BEGIN
SELECT * FROM B WHERE typeID=2
UNION ALL
SELECT * FROM B WHERE typeID=1
UNION ALL
SELECT * FROM B WHERE typeID=3
END
ELSE IF(@type=1)
BEGIN
SELECT * FROM B WHERE typeID=3
UNION ALL
SELECT * FROM B WHERE typeID=2
UNION ALL
SELECT * FROM B WHERE typeID=1
END
END
samyou 2011-03-30
  • 打赏
  • 举报
回复
多谢各位,但我的本意不是这样。
它的排序可能是“差”-“中”-“好”,也有可能是“中”-“好”-“差”,也要可能是“好”-“差”-“中”。这个是由客户所订的。
chuanzhang5687 2011-03-30
  • 打赏
  • 举报
回复
select * from B order by TypeID desc
快溜 2011-03-30
  • 打赏
  • 举报
回复
select * from B order by NAME,TYPEID dessc
叶子 2011-03-30
  • 打赏
  • 举报
回复
order by TYPEID desc
kingtiy 2011-03-30
  • 打赏
  • 举报
回复
select * from B order by TypeID desc;
gogodiy 2011-03-30
  • 打赏
  • 举报
回复

create table t1
(
id1 int,
name1 varchar(10),
tid int
)
insert into t1
select 1, '张1', 1 union all
select 2, '张2', 1 union all
select 3, '李1', 3 union all
select 4, '李2', 2 union all
select 5, '李3', 2
select * from t1 order by case tid when 3 then 0
when 2 then 1
else 2 end,name1

直接在ORDER BY后面通过CASE WHEN语句来设定你想要的排序顺序就行了。
  • 打赏
  • 举报
回复
CainLai 2011-03-30
  • 打赏
  • 举报
回复

select B.*,A.TYPE from B inner join A on B.TYPEID=A.ID order by (case A.TYPE when '好' then 1 when '中' then 2 when '差' then 3 end) desc

新手,随便试着写的,可能有错误,思路是这样……

34,587

社区成员

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

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