工作中用到的sqlserver语句

SQLSERVER无排序生成序号

    --实现方式:ROW_NUMBER()
    SELECT RowID=(ROW_NUMBER() OVER(ORDER BY(SELECT 0))) FROM 表名

case when的使用方法

Case具有两种格式。简单Case函数和Case搜索函数。

 第一种 格式 : 简单Case函数 :

格式说明    
    case 列名
    when   条件值1   then  选项1
    when   条件值2    then  选项2.......
    else     默认值      end

eg:
    select 
    case   job_level
    when     '1'     then    '1111'
    when   '2'     then    '1111'
    when   '3'     then    '1111'
    else       'eee' end
    from     dbo.employee

 第二种  格式 :Case搜索函数
 
格式说明    

    case  
    when  列名= 条件值1   then  选项1
    when  列名=条件值2    then  选项2.......
    else    默认值 end

eg:
    update  employee
    set         e_wage =
    case
    when   job_level = '1'    then e_wage*1.97
    when   job_level = '2'   then e_wage*1.07
    when   job_level = '3'   then e_wage*1.06
    else     e_wage*1.05
    end
--用身份证号字段判断 男女:   18位):
update 表名  set sex= CASE when   Substring(身份证号字段,17,1) %2 = 1 then 1 else 0 END1815位):
CASE when case when len(s_sfzhm)=15 then Substring(s_sfzhm,15,1) else Substring(s_sfzhm,17,1) END %2 = 1 then '男' else '女' END
--更多案例:https://www.cnblogs.com/zhuyeshen/p/10917397.html

INSERT SELECT语句

1.此语句的作用是将SELECT语句的结果插入表中,可实现数据迁移
2.语法:insert into 插入的表名(字段1,字段2,字段3) select 被查询的字段1,被查询的字段2 from 被查询的表名;
3.先查看需要插入的表的所有数据

sqlserver 把SELECT结果集中一列的所有的值 用逗号隔开放进一个字段内

SELECT  STUFF(( SELECT  ',' +convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('')), 1, 1, '') AS UserName
--语句原理:https://www.cnblogs.com/blazeZzz/p/7359575.html

创建临时表(简单)

1:
CREATE TABLE #t1 (
[userid] varchar(10) NULL ,
[Num] varchar(10) NULL
)
insert into  #t1 (userid,num) values('张三','888')

2:
declare @a table (年龄 int,身高 int,学历 varchar(1))
insert into @a
select 12,170,'A' union all
select 11,150,'B' union all
select 10,160,'C'
--> 测试数据: @b
declare @b table (年龄1 int,年龄2 int,身高1 int,身高2 int,学历 varchar(1))
insert into @b
select 12,13,140,145,'B' union all
select 11,13,170,180,'a' union all
select 12,13,170,180,'A'

select * from @a
select * from @b

IF ELSE

不能用在SELECT中,只能是块,比如:

IF …

BEGIN

…(代码块)

END

ELSE (注意这里没有ELSE IF,要实现只能在下面的块中用IF判断)

BEGIN

…(代码块)

END

列:

    declare @num int --定义变量
    set @num=1 --赋值变量
    if(@num>10)
    begin
    select * from 表1
    end
    else
    begin
    if(@num<0)
    select Top(20) * from 表2
    else
    print @num
    end

创建变量循环一个表(用于多条数据插入和传值查询)

--drop table #t3
CREATE TABLE #t3 (
[userid] varchar(10) NULL ,
[cNum] varchar(10) NULL
)
--drop table #t4
CREATE TABLE #t4 (
[userid] varchar(10) NULL ,
[course] varchar(255) NULL
)

--根据临时表循环处理
declare @userid varchar(10)
declare @subjectID varchar(10)
declare @Studykindid varchar(10)
declare @CourseStr  varchar(255)
declare @coursename varchar(255)

declare rs0 cursor for

select subjectID,Studykindid,userid
from #t2 

open rs0
fetch next from rs0 into @subjectID,@Studykindid,@userid
while @@fetch_status=0
begin

	--统考已通过门数	
	--enableCourseStr=getEnableCourseIDs(Studykindid,SubjectID) 
	--TkeNum=getTkCourseidNum(enableCourseStr,UserID)
	if(@Studykindid <> 'a01' and  @Studykindid <> 'a02' )
	begin
		select @CourseStr	= Case when courseIDs2 <> ''  then  courseIDs2  else courseIDs end  from 
		 (select courseIDs,
				(select courseIDs from GJTK_StuCourseLimited  where studykindid= l.studykindid 
						and subjectID = @subjectID
				) as courseIDs2
			from GJTK_StuCourseLimited l
			where studyKindID = @Studykindid  and (subjectid = '' or subjectid is null)
		  )as courseIDs
		insert into  #t3 (userid,cNum) 
		select  stuid as userid,isnull(count(courseid),0) as cNum   from (
			select distinct stuid,courseid 
			from GJTK_StuSelectCourse 
			where score='合格' and stuid='@userid' and courseid IN (@CourseStr) 
			union 
			select distinct v.stuid,g.courseid from V_GJTK_Apply v 
			inner join GJTK_CourseSys g on v.TongkaoCourse=g.course 
			where v.courseStatus='已通过' and v.stuid='@userid' and g.courseid IN (@CourseStr) 
		) a  GROUP BY a.stuid
	end
	
	
	--未选的必修课
	SELECT @coursename =  STUFF(( SELECT  '、' +convert(VARCHAR,course ) FROM 	 
	(select 
	 s.course 
	FROM
		subjectcoursesys s
	INNER JOIN coursekindnumtwolist c ON s.CourseKindIDNumTwo = c.CourseKindIDNumTwo 
	WHERE
		s.subjectid = @subjectID
		and c.typeid = 1
	except 
	select s.course  from studentcoursesys stu
	INNER JOIN subjectcoursesys s on  s.courseID =stu.courseID
	where  userID = @userid
	)as aaa
	FOR XML PATH('')), 1, 1, '')

	insert into  #t4 (userid,course) values(@userid,@coursename)

fetch next from rs0 into  @subjectID,@Studykindid,@userid
end
close rs0
deallocate rs0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值