日期:2014-05-19  浏览次数:20565 次

希望高手指点,求SQL语句一条,谢谢。。
举例数据库表结构如下:
id       username         valid     create_date
1             admin               y             2007-3-1
2               yy                   y             2007-3-1
3             abc                   n             2007-3-1
4             ddd                   y             2007-3-1
5             sdf                   y             2007-3-1
6             love                 n             2007-3-1
7             like                 n             2007-3-1
8             good                 y             2007-3-1

需求:   我想通过一条查询语句,得到这样的结果:   valid(有效)值等于Y的在查询结果的最前面,而valid(有效)值等于n的排在后面,并以create_date进行升序或是降序的排序,如果valid值都为n那么就按create_date   进行排序,如果valid值都为y那么也按create_date   进行排序,不知道大家能明白我的意思吗。

在说的简单一点就是,我在数据库中,排序是按   create_date(创建日期)进行排序的,但是,valid这一列,如果有值是y的,一定要排在查询结果的最前面。(而且这列valid值也是按日期进行排序的)
   


------解决方案--------------------
create table a (id int,username nvarchar(10),valid nvarchar(1),create_date datetime)

insert into a (id,username,valid,create_date)
select 1, 'admin ', 'y ', '2007-3-1 ' union
select 2, 'yy ', 'y ', '2007-3-1 ' union
select 3, 'abc ', 'n ', '2007-3-3 ' union
select 4, 'ddd ', 'y ', '2007-3-1 ' union
select 5, 'sdf ', 'y ', '2007-3-4 ' union
select 6, 'love ', 'n ', '2007-3-1 ' union
select 7, 'like ', 'n ', '2007-3-6 ' union
select 8, 'good ', 'y ', '2007-3-1 '

select * from a order by valid desc,create_date desc

drop table a


------解决方案--------------------
select * from 表 order by valid,create_date desc
------解决方案--------------------
select * from 表 order by valid desc,create_date desc
------解决方案--------------------
select * from [table] order by valid desc,create_date
------解决方案--------------------
select * from tbName
order by valid desc,create_date desc

------解决方案--------------------
ORDER BY 子句
指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。

语法
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]

参数
order_by_expression

指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。

可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。

ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。