代码改变世界

留念2010年6月1日——SQL

2010-06-02 14:22  听风吹雨  阅读(756)  评论(5编辑  收藏  举报

今天做了一些SQL的题目,感觉自己还是有很多地方不足的。比如一些函数的使用,要么是函数名记不得,要么就是函数中的参数记不得,所以,决定以后多敲敲SQL代码。

今天就先贴些被遗忘的SQL,以便以后提醒自己下次不能再犯同样的错误。 

--返回新增的自增ID
SELECT @@IDENTITY

--对字段值进行判断
CASE WHEN PersonalGrade=9 THEN 1 ELSE 0 END AS 'Names'
SELECT CASE WHEN '字段名' IS NULL THEN '\N' ELSE CONVERT(VARCHAR(20),'字段名'END AS 'NewName' 
--特殊情况下可以和上面是等价的
SELECT COALESCE('字符串类型字段','\N'AS 'NewName'
SELECT COALESCE(CONVERT(VARCHAR(20),'非字符串类型字段'),'\N'AS 'NewName'
SELECT COALESCE(CONVERT(VARCHAR(20),NULL),'\N'AS 'NewName'

--日期类型转换
SELECT CONVERT(varchar(100), GETDATE(), 23)--2006-05-16

--查询一个表内相同纪录
SELECT * FROM 表 WHERE ID IN (SELECT ID FROM 表 GROUP BY ID HAVING SUM(1)>1)
SELECT * FROM 表 WHERE ID1+ID2+ID3 IN(SELECT ID1+ID2+ID3 FROM 表 GROUP BY ID1,ID2,ID3 HAVING SUM(1)>1)

 

记得还有一道这样的题目:查询出最低分数的记录。这样的需求最容易被认为使用top 1就可以解决了,但是在很多情况下有可能最低分数的记录有多条,这样会漏掉很多的记录。我的做法是如下,但是好像还有其它方法,不记得,如果有人知道的话可以提醒一下我。

--只记得这个方法了.
SELECT * FROM tableName WHERE source = (SELECT MIN(source) FROM tableName)

 

今天也发现一个很有创意的SQL:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1<>1

其实在很多OA系统页面上的查询,通常都是会使用拼凑SQL的,那么那个and该如何处理呢?通常来说也是使用where 1=1后面就接and的条件了。