查询同一个表,类型1降序排列,类型B顺序排列,不打乱两个顺序的基础上按时间排序,sql语句怎么写?

查询一个列表C(编号a,类型b,时间c,等级d),类型分1类型1按A降序排列,类型2按B升序排列,在此基础上按时间排序
难点在于按时间排序和按等级排序条件有冲突,必须在保证等级顺序不变的情况下排序

等级d 的数据类型是什么? 数字型的话, 倒是好处理

SELECT
*
FROM
C
ORDER BY
b, case when b = 1 then -1 * d else d end, c

order by 的处理逻辑是:
首先按照 b 类型 1、2 进行排序。

然后 如果 类型 = 1, 那么按照 -1 * d 进行排序, 也就是 相当于 按等级d降序排列
否则,按照 d进行排序, 也就是按等级d升序排列

最后就是按 c 排序了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-18
select * from
table
order by (decode (类型B,1,'类型 A',2,'类型 D'))
第2个回答  2013-03-18
你最好给点例子,具体数据看一下,光听你描述有点乱追问

查询一个列表C(编号a,类型b,时间c,等级d),类型有1、2两种,类型1按等级d降序排列,类型2按等级d升序排列,在此基础上,不改变原来先后顺序按时间c排序

追答

sqlserver:--一个是数据库版本可能不对应,另一个没看懂时间要怎么排
;with cte as(
select *,row_number() over(partition by type order by level)rn from #t
)
,cte1 as(
select *,row_number() over(partition by type order by level desc)row from cte
)select * from cte1 order by type,case when type=2 then rn else row end

来自:求助得到的回答
第2个回答  2013-03-18
可以将sql拼成字符串,然后用 sp_excute()执行,

先按等级排序,再按时间排序啊, 排序条件用逗号分开.
相似回答