SQL学习杂记
go
--利用系统自带函数 行转列 列转行
select * from tb pivot (max(分数) for 课程 in (语,数,外)) a
select 姓名,课程, 分数 from tb unpivot (分数 for 课程 in(语,数,外)) a
go
--自定义SQL函数
create function Test(@num int ,@num1 int,@num2 int)
returns int
as
begin
return @num+@num1+@num2
end
select dbo.Test(1,2,3)
go
--删除函数
drop function Test
go
--内联(单语句)的返回表的用户自定义函数
create function hoteye
(
@a int
)
returns table --返回表
as
return select * from EmEmpData --表名
where EmpID=@a
select * from dbo.hoteye(1)
drop function hoteye
go
go
--多语句的返回表的用户自定义函数
create function hoteye1
(
@empno varchar(20)
)
returns @tab table(
name varchar(20),
sex char(2),
EmpNo varchar(20)
)
with encryption
as
begin
insert into @tab(name,sex,EmpNo)
select EmpName,Sex,EmpNo from EmEmpData where EmpNo=@empno
return
end
drop function hoteye1
select * from hoteye1('1609014')
--dense_rank()
--与rank区别,rank实排名,如有两位并列第一名,后面则没第二名,直接第三名
select dense_rank() over(order by 积分) 实排名 , *
-- dense_rank密集排名,现实中排名会出现两个或多个名列名次
--如果出现并列第一名,依然有第二名,第三名等
--order by 积分,按积分进行密集排名
from NewLts.dbo.个人信息 --数据来源NewLts.dbo.个人信息
--ntile()
select ntile(4)over( partition by 性别 order by 积分) ,*
--partition by 性别 order by 积分,表示按性别分组,再按积分排序
--ntile(4)按积分排序分成4组
from NewLts.dbo.个人信息
--数据来源NewLts.dbo.个人信息
--row_number()
--注意:函数“row_number”必须有包含 ORDER BY 的 OVER 子句。
select row_number() over (partition by 性别 order by 年龄) 行号 , *
--row_number行号,PartitionBy性别,将性别进行分组在进行年龄排序
from NewLts.dbo.个人信息
--数据来源NewLts.dbo.个人信息
--问题:事务运行至一半断开 如何处理?
--begin tran 开始事务
--commit tran 提交事务
--start transaction 执行开始事务
--set constrains 在当前事务中设置约束
--set transaction 设置下一个要执行的事务属性
--savepoint 在事务中设置保存点,可以理解为断点,用来标识重新开始事务的位置。
--release savepoint 释放保存点
--rollback 标识中止事务