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