(持续更新)用到哪儿,更新到哪儿!
1、显示行号
select row_number() over (order by fid) 行号,* from T_NATION;
2、字段不为空
select * from T_EMP where len(title)>1;
3、order by 字段为nvarchar,varchar使得排序无效 --将字段转换成int类型即可
select convert(int,fid) fid,fname from T_HIS_FEETYPE group by fid,fname ORDER BY convert(int,fid) ASC
4、转换varchar/nvarchar值‘000000011052400001’时溢出整数列搜索。超过了其最大整数值 --
select convert(bigint,orderno) orderno,typename,OPERATOR from T_HIS_CARDTYPE
where OPERATOR='000000011052400001' group by orderno,typename,OPERATOR order by convert(bigint,orderno) ASC
5、EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
create table t1(id int,mark char(2))
go
create table t2(id int,mark char(2))
go
insert into t1
select 1,'t1' union all
select 2,'t2' union all
select 3,'t3' union all
select 4,'t4'
go
insert into t2
select 2,'t2' union all
select 3,'m3' union all
select 5,'m5' union all
select 6,'t6'
go
select * from t1
EXCEPT
select * from t2
go
select * from t1
INTERSECT
select * from t2
go
--EXCEPT结果集为
--1 t1
--3 t3
--4 t4
--INTERSECT结果集为
--2 t2
6、LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
7、RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name
8、FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
你可以通过is NULL将没有匹配的值找出来:
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
9、CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。
SELECT * FROM TableA CROSS JOIN TableB
10、简单的说row_number()从1开始,为每一条分组记录返回一个数字;
ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。