❶ sql server 怎么排序
排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序还是降序,就假定为 ASC。
下面的查询返回按 ProctID 升序排序的结果:
代码如下 复制代码
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctLine, ProctModelID
FROM Proction.Proct
ORDER BY ProctID;
如果 ORDER BY 子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序 Proction.Proct 表中的行,然后在每个产品子类别中按 ListPrice 升序排序这些行。
代码如下 复制代码
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctSubcategoryID, ListPrice
FROM Proction.Proct
ORDER BY ProctSubcategoryID DESC, ListPrice;
问题
同一个查询的结果集为什麽有时候是按他想要的顺序排列,有时候又不是,或者是在SQL2000里是这个顺序,到了SQL2005/2008又是那个顺序?
其实,只要语句里没有指定“order by”,SQLSERVER并不会按照顺序返回的。有可能你的表里有一个字段已经建立了索引
你想结果集按照那个建立了索引的字段排序,那么你不指定“order by”是没有问题的,因为表的存储顺序就是按照那个字段
的顺序排好序了,所以可以不指定“order by”,但是如果你没有在想排序的那个字段建立索引,或者在SQL2000里建立了
索引,而在SQL2005/2008里没有建立索引,那么就要明确地用“order by”指定。如果你没有指定,哪怕一模一样的查询,
结果集顺序这一次和上一次不一样是很正常的。
❷ 求解SQL数据库两张表数据的排序问题
select ID=Dept_ID,Name=Dept_Name
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
首先通过
select *,flag=0 from d_dept
union all
select *,1 from d_unit
将所有内容合并在一起 这样合一起是乱序的
然后将它作为临时表
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
注意这里我加个了个FLAG字段 是为了标志0为部门 1为单位 为之后排序做准备
然后利用这个临时表 我进行排序 看下面
select ID=Dept_ID,Name=Dept_Name
这句的意思 理解的吧 选取临时结果集的2个字段,注意这里的Dept_ID和Dept_Name分别语句包含了unit_ID 和unit_Name(这个自己执行下临时结果集就知道了)
我们重点来说排序
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
先看第一个left(Dept_ID,3) 首先要进行部门排序的 我们是以左边三个符号位排序信息的 排出来就是
001
001001
..
002
..
003
003...
上面的排序不保证每个部门里面的排序时按照部门号先 然后再改部门的单位的顺序 所以加上flag asc
在每组里面 要让部门号先 通过FLAG=0 将部门号放在了前面
所以这里出来:
001
001001
..
002
..
003
003...
请看 在001号部门里面 001 肯定在 001XXX前面了
但是这排序不能保证 001XXX 001XXY这样的单位号排序 就是加上
Dept_ID asc 明白了吧
❸ SQL中多条件排序问题
第一步:确定输出内容,你要的字段为name,数据结果为b,d,a,c ;
第二步:找规律,b、d的online为1;a、c的位说明是按online 降序;然后来看下 b 、d的online相同,viewnum为30和10,那么就是viewnum降序;如果a、c的viewnum也是降序那么规律就找到了,发现 a为40、c为20,确实是降序,满足条件。
第三步:总结规律就是先按online降序排序,之后再按viewnum降序排序。
第四步:得出需要的sql。
,viewnumdesc;
❹ 如何将datatable进行多列排序
你可以试试这样
设你datatable名称为table
table.DefaultView.Sort = "号码 asc,时间 desc"
其中 asc还是desc你自已指定
最后取数据取table的View而不是table
❺ sql语句如何根据另一个表进行排序
select a.*
from a
left join
(
select h,count(*) as c_num
from b
group by h
)t
on a.h=t.h
order by t.c_num desc/asc以B表H字段的重复量来对A表的数据进行排序,至于是升序还是降序,楼主根据自己的需求吧
❻ 在SQL语句中,如何把两张表的数据按时间排序查询
表a为入库表
表b为出库表
它们都有一个日期字段 mkrdat,货号为 goodsid,数量字段为qty
那么两张表的组合方式可以这样
select goodsid,qty ,mkrdat from
(select goodsid,qty ,mkrdat from a where goodsid ='查询货号' union all
select goodsid,qty ,mkrdat from b where goodsid ='查询货号'
)
aa order by goodsid,mkrdat
❼ 急求sql语句:2表合并查询、统计并排序
select 姓名,签到,max(时间) 时间,count(*) 次数
from (select 姓名,签到,时间 from table1
union all
select 姓名,签到,时间 from table2
)
group by 姓名,签到
order by 次数 desc
❽ 求多表查询,多列排序,的SQL语句
INNER JOIN 运算
组合两个表中的记录,只要在公共字段之中有相符的值。
语法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 运算可分为以下几个部分:
部分 说明
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."
说明
可以在 FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。
可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN或 RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。
若试图联接包含 Memo或 OLE Object数据的字段,会导致错误。
可以联接任何两个相同类型的数值字段。例如,可以联接 AutoNumber和 Long字段,因为它们类型相似。但不能联接 Single 和 Double 类型的字段。
下列示例显示如何在类标识符字段联接类表及产品表:
SELECT CategoryName, ProctName
FROM Categories INNER JOIN Procts
ON Categories.CategoryID = Procts.CategoryID;
在上面的示例中,类标识符是已被联接的字段,但是它并不包含在查询输出中,因它并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中, Categories.CategoryID.
也可以使用下列语法,在一个 JOIN 语句中链接多个 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列语法,嵌套 JOIN 语句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。
--------------------------------------------
ORDER BY 子句
按照递增或递减顺序在指定字段中对查询的结果记录进行排序。
语法
SELECT 字段表
FROM 表
WHERE选择准则
[ORDER BY字段1 [ASC | DESC ][, 字段2 [ASC | DESC ]][, ...]]]
包含 ORDER BY 子句的 SELECT 语句具有以下几个部分:
部分 说明
fieldlist 要和任何字段名别名, SQL 合计函数s, 选择断定 (ALL, DISTINCT, DISTINCTROW或 TOP)或其他 SELECT 语句 选择一起检索的字段名称。
table 从其中获取记录的表的名称。欲知更多信息请看 FROM 子句.
selectcriteria 选择准则。如果此 语句 包含一个 WHERE 子句, Microsoft Jet数据库引擎 会在记录上应用WHERE条件,然后把值排序。
field1, field2 要排序记录的字段名。
说明
ORDER BY 是可选的。不过,如果要将数据以排序时的顺序显示出来,就必须使用 ORDER BY。
缺省排序顺序是升序 (A至 Z, 0至 9).以下两个示例都用雇员的姓对雇员姓名排序:
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName;
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName ASC;
为按递减顺序排序(Z 至 A,9 至0),必须将 DESC 保留字添加到要递减排序的每一字段的尾部。下例选择雇员薪金并对雇员用递减顺序排序。
SELECT LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName;
如果你在ORDER BY 子句中标明了包含 Memo或 OLE Object数据的一个字段,一个错误就产生了。Microsoft Jet 数据库引擎不对这些类型的字段排序。
ORDER BY通常是 SQL 语句中最后一项。
ORDER BY 子句可包含添加的字段。首先用 ORDER BY之后列举的第一个字段对记录排序。然后对此字段中等值的记录用第二字段列举的值进行排序,依此类推。