sql排序问题

请问一个排序问题
表: s
id type
1 0
2 0
3 1
4 2
5 2
6 3
7 3
8 4
9 5
10 6
排序后
id type
1 0
3 1
6 3
10 6
7 3
2 0
4 2
8 4
5 2
9 5
排序规则是
id type
1 0
2 0
第三个为3 1
由于第三个type为1所以跟在1 0后面
id type
1 0
3 1
2 0
第四个type为2所以跟在2 0后面
id type
1 0
3 1
2 0
4 2
第五个type为2所以也跟在2 0后面
由于第五个id=5比第四个id=4小所以排在第四个后面
id type
1 0
3 1
2 0
4 2
5 2
第六个type为3所以跟在3 1后面
id type
1 0
3 1
6 3
2 0
4 2
5 2
第七个type为3所以跟在3 1后面
同时第七个id=7比第六个小所以排在第六个后面
id type
1 0
3 1
6 3
7 3
2 0
4 2
5 2
第八个 8 4
跟在id=4后面
id type
1 0
3 1
6 3
7 3
2 0
4 2
8 4
5 2
第九个9 5
跟在id=5的后面
id type
1 0
3 1
6 3
7 3
2 0
4 2
8 4
5 2
9 5
第十个10 6跟在id=6的后面
id type
1 0
3 1
6 3
10 6
7 3
2 0
4 2
8 4
5 2
9 5
请问,怎么用sql语句排序

CREATE TABLE #s (
id INT,
type INT
);

INSERT INTO #s
SELECT 1 , 0 UNION ALL
SELECT 2 , 0 UNION ALL
SELECT 3 , 1 UNION ALL
SELECT 4 , 2 UNION ALL
SELECT 5 , 2 UNION ALL
SELECT 6 , 3 UNION ALL
SELECT 7 , 3 UNION ALL
SELECT 8 , 4 UNION ALL
SELECT 9 , 5 UNION ALL
SELECT 10, 6
go

with CTE AS (
SELECT
id,
type,
1 as Lev,
ROW_NUMBER() OVER(ORDER BY (SELECT 1)) * 1000000 AS [seq]
FROM
#s
WHERE
type = 0
UNION ALL
SELECT
s.id,
s.type,
CTE.Lev + 1 AS Lev,
case
when CTE.[Lev] = 1 then CTE.[seq] + ROW_NUMBER() OVER(ORDER BY (SELECT 1)) * 10000
when CTE.[Lev] = 2 then CTE.[seq] + ROW_NUMBER() OVER(ORDER BY (SELECT 1)) * 100
when CTE.[Lev] = 3 then CTE.[seq] + ROW_NUMBER() OVER(ORDER BY (SELECT 1))
else CTE.[seq] + ROW_NUMBER() OVER(ORDER BY (SELECT 1))
end as [seq]
FROM
#s s
JOIN CTE
ON (s.type = CTE.id)
)
SELECT
id,
type
FROM
CTE
ORDER BY
[seq]
GO

id type
----------- -----------
1 0
3 1
6 3
10 6
7 3
2 0
4 2
8 4
5 2
9 5
(10 行受影响)

SQL Server 2008 Express 下测试通过。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-03
你这排序没法排,条件不足,不能排序。
排序条件必须在数据库中存在,而不是在你脑子中存在,你的数据库设计有问题,应该重新设计一下数据库。本回答被网友采纳
第2个回答  2013-04-03
排序规则太模糊了,把你的排序规则总结一下吧
还有,你的排序的数据就是这样的10行数据,还是说这只是举的一个例子?追问

规则很清楚了,并没有按哪一个字段排,这里只是说一个例子,并不是只有10行数据,

sql 升序降序排列
在SQL查询中,排序操作是非常常见的,它可以帮助我们按照特定字段对数据进行整理。当我们需要对数据进行升序或降序排列时,可以使用ORDER BY语句来实现。具体来说,如果你想按照字段'cpbh'进行降序排列,可以使用以下SQL语句:sql SELECT * FROM kc ORDER BY cpbh DESC;这里,`DESC`关键字指示结果应按'...

sql查询结果排序
在SQL中,可以使用`ORDER BY`语句对查询结果进行排序。通过指定列名及排序方向,可以实现查询结果的排序。详细解释:1. ORDER BY语句的基本用法:SQL中的`ORDER BY`语句用于对查询结果按照一个或多个列进行排序。该语句通常位于SQL查询语句的末尾部分。例如,假设有一个名为“students”的表,包含“id”...

sql 多条件排序问题
在SQL中,`order by` 后可以指定多个排序字段,按照你编写排序字段的顺序进行排序。同时,每个字段的排序方向,无论是升序或降序,同样支持并可以明确指定。默认情况下,若未指定排序方向,则为升序排序。例如,`order by column1(asc or desc),column2(asc or desc),column3(asc or desc),column4(...

如何用sql语句排序一个倒一个顺 比如 az 这个字段是顺序 asc id这个字...
在SQL中,我们可以通过使用`order by`语句来对数据进行排序。例如,如果我们想要按照学号升序和成绩降序来排列学生信息,我们可以编写如下SQL语句:sql SELECT * FROM tab ORDER BY id ASC, score DESC;这里的`ORDER BY`语句包含两个部分:`id ASC`和`score DESC`。`ASC`表示升序排序,`DESC`表示降...

SQL查询结果排序
SQL查询结果的排序方法 在SQL查询中,数据排序是常见的需求。默认情况下,ORDER BY子句会让结果按照升序排列,可用ASC关键字明确表示,或者省略,因为默认就是升序。例如,查询职员信息时,不指定排序方式,数据会自动按姓名或薪水升序排列。如果需要降序排列,就需要在排序后加上DESC关键字。例如,查询职员...

SQL语句如何排序?
排序采用ORDER BY语句:ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录行排序。如果希望按照降序对记录进行排序,可以使用 DESC关键字。SQL有两种使用方式:一是联机交互使用,这种方式下的SQL实际上是作为自含型语言使用的。另一种方式是嵌入到某种高级程序设计语言(如C...

怎样使用sql语句来对数据进行排序?
使用 SQL 中的 ORDER BY 子句按升序对数据进行排序。ORDER BY 语法 这是按升序对数据进行排序的基本语法:SELECT columns FROM table ORDER BY column;如果要按降序排序,则必须使用 DESC 关键字。SELECT columns FROM table ORDER BY column DESC;SQL 中的 SELECT 语句告诉计算机从表中获取数据。SQL ...

sql中怎么实现排序?
sql中排序倒序使用desc关键字,一般需要和orderby合用,示例sql语句如下:例如:select*fromstudentorderbyagedesc;意思是查询学生表,以学生年纪倒序排列。排序采用orderby子句,orderby后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,orderby默认采用升序(asc),如果存在where子句,那么orderby必须...

sql正负数排序问题
sql正负数排序问题:1、正确写法select*fromtabORDERBYnum=--,convert(numDECIMAL(10,2))desc;select...123123。2、常规排序:只有正数部分倒序排列,负数部分不符合要求。3、union会导致某部分数据排序紊乱。

sql中排序要怎么写?
在SQL查询中,对结果进行排序是常见的需求。ORDER BY语句就像一个指挥棒,帮助我们按照特定规则整理数据。当你需要按照数据的大小,无论是从小到大(ASC,升序)还是从大到小(DESC,降序),都可以通过这个指令实现。基本的语法结构如下:SELECT "字段名"FROM "表名"[WHERE "条件"]ORDER BY "字段名"...

相似回答