1.取出分组最大值的那行记录
主要是ROW_NUMBER() 的使用,利用生成序号取第一条记录出来
select *
from (
select *,ROW_NUMBER() over(partition by 分组字段 order by 排序字段 desc) as rn
from students
) a
where a.rn <=1;
2.将查询结果插入表格或插入到一张新表格
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
或者:Insert into Table2 select * from Table1
(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
3.按条件批量更新字段
update 主表别名 set 主表别名.name=(select 子表别名.name from 子表 子表别名 where 主表别名.id=子表别名.id) from 主表 主表别名
update student set age=tm.age from temporary tm where student.name=tm.name
4.使用表变量代替游标
-- 声明表变量
DECLARE @temp TABLE
(
empid INT,
firstname NVARCHAR(10),
lastname NVARCHAR(20)
);
-- 将源表中的数据插入到表变量中
INSERT INTO @temp(empid, firstname, lastname )
SELECT empid,firstname,lastname FROM HR.Employees
ORDER BY empid;
-- 声明变量
DECLARE
@empid AS INT,
@firstname AS NVARCHAR(10),
@lastname AS NVARCHAR(20);
WHILE EXISTS(SELECT empid FROM @temp)
BEGIN
-- 也可以使用top 1
SET ROWCOUNT 1
SELECT @empid= empid, @firstname= firstname,@lastname= lastname FROM @temp;
UPDATE HR.Employees SET fullname= @firstname+' '+@lastname WHERE empid=@empid;
SET ROWCOUNT 0
DELETE FROM @temp WHERE empid=@empid;
END