请问:
1、假设有这么个查询:
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1现在要对取得的结果根据 COL1 进行排序,要求当 COL1 的内容为空(NULL)时,不管,是按升序还是降序排,NULL都要在最后,这要如何实现呢?2、存贮过程中,可以定义可选参数么?要如何实现呢?
1、假设有这么个查询:
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1现在要对取得的结果根据 COL1 进行排序,要求当 COL1 的内容为空(NULL)时,不管,是按升序还是降序排,NULL都要在最后,这要如何实现呢?2、存贮过程中,可以定义可选参数么?要如何实现呢?
解决方案 »
- sql2005视图统计NULL值,用什么关键词改为数值
- PUBS数据库可以再SQL Server2008中使用吗?
- 给数据库中表的某一行上锁!能否!!??
- 不知道sql能不能这样实现
- 用什么命令修改表的字段名
- 多个表的查询问题
- SELECT * FROM UserTable WHERE (UID = 'jfc')记录中是有jfc的已居然出来不了,记录里并没有空格这些.
- 帮帮看一下这个存储过程啊,为什么top 处老出错呢?,急,高分送出
- 如何将SQL SERVER中的一个视图数据导入到一个dbf文件中?
- 如果存储过程的参数很多好不好
- 关于sql2000链接access
- 项目进入的关键时期,一条SQL语句另项目快要延期了,哭啊,在线等...全靠兄弟们了
FROM DB_TEST
WHERE COL2 = 1 and col1 is not null
order by col1
union all
SELECT COL1,COL2
FROM DB_TEST
WHERE col1 is null
1.
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1
--順序
order by case when col1 is null then 2
else 1 end,COL1
--倒序
--order by case when col1 is null then 2
else 1 end,COL1 desc
還是指有默認值的參數??
筆如:
create proc usp_test
@a char(01),
@b char(01)='b'
as
print @a+@b
goexec dbo.usp_test 'a'
--結果ab
exec dbo.usp_test 'a','c'
--結果ac
2.在baidu里搜“不定参数存储过程”
select *
from a
order by isnull(f2,'zzzzzzzzzzzz')--当为升序时设置为最大的值
--降序
select *
from a
order by f2 desc
--------至于楼主可以传递参数进行动态设置
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1现在要对取得的结果根据 COL1 进行排序,要求当 COL1 的内容为空(NULL)时,不管,是按升序还是降序排,NULL都要在最后,这要如何实现呢?2、存贮过程中,可以定义可选参数么?要如何实现呢?
create proc test
@iSortType int--排序类型,0为降序,1为升序
as
if(@iSortType=0)--降序
begin
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1
order by col1 desc
end
else if(@iSortType=1)--升序
begin
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1
order by isnull(col1,'zzzzzzzzzzzzzzzzz')--这个要看字段定义的数据类型长度
end
--测试
--降序
exec test 0
--升序
exec test 1
这个问题就不用回答了,自己试一下就知道了,呵呵,自己多动手试试
FROM DB_TEST
WHERE COL2 = 1
--順序
order by case when col1 is null then 2
else 1 end,COL1
--倒序
--order by case when col1 is null then 2
else 1 end,COL1 desc
前边 playwarcraft(时间就像乳沟,挤挤还是有的) 兄弟给的这个方法,调试结果是正确的,可是不明白其中的意思,能够解释一下不?“order by case when col1 is null then 2
else 1 end,COL1 ”这么句话的意思是什么呢??
------------------------
B
C
NULL
A
NULL
D
------------------------
则,执行case 之后是不是就是:
------------------------
B ---〉 1
C ---〉 1
NULL ---〉 2
A ---〉 1
NULL ---〉 2
D ---〉 1
------------------------
那这样子的话,它是怎么实现下边这个结果的呢?
------------------------
A
B
C
NULL
NULL
------------------------
能解释一下不?谢谢 ^_^
insert test
select 'B',1 union all
select 'C',1 union all
select NULL,2 union all
select 'A',1 union all
select NULL,2 union all
select 'D',1select * from test order by b,a
--------------------
A B
---------- -----------
A 1
B 1
C 1
D 1
NULL 2
NULL 2
else 1 end
,COL1 ----------
因為後面還有,COL1你沒看到吧,
是先按case排序(也就是不是NULL的為1排前面,是NULL的為2排後面)
然後再按COL1本身排.
B
C
NULL
A
NULL
D
------------------
1.先按case排序
B
C
A
D
NULL
NULL
2.再按COL1排序
A
B
C
D
NULL
NULL