有哪些SQL查询小技巧
本篇内容介绍了“有哪些SQL查询小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1、行列转换
问题:假设有张学生成绩表(tb)如下:
想变成(得到如下结果):
代码:
WITHtb(姓名,课程,分数)AS(SELECTN'张三',N'语文',74UNIONALLSELECTN'张三',N'数学',83UNIONALLSELECTN'张三',N'物理',93UNIONALLSELECTN'李四',N'语文',79UNIONALLSELECTN'李四',N'数学',86UNIONALLSELECTN'李四',N'物理',88)SELECT姓名,MAX(CASE课程WHEN'语文'THEN分数ELSE0END)语文,MAX(CASE课程WHEN'数学'THEN分数ELSE0END)数学,MAX(CASE课程WHEN'物理'THEN分数ELSE0END)物理FROMtbGROUPBY姓名
2、分页
方案一:利用NOT IN和SELECT TOP分页语句形式
SELECTTOP10*FROMTestTableWHEREIDNOTIN(SELECTTOP20IDFROMTestTableORDERBYID)ORDERBYID
方案二:利用ID大于多少和SELECT TOP分页语句形式
SELECTTOP10*FROMTestTableWHEREID>(SELECTMAX(id)FROM(SELECTTOP20idFROMTestTableORDERBYid)AST)ORDERBYID
方案三:利用SQL Server中的特性ROW_NUMBER进行分页
SELECT*FROM(SELECTROW_NUMBER()OVER(ORDERBYIDDESC)ASROWID,*FROMTestTable)ASmytablewhereROWIDbetween21and40
3、结果合并
合并重复行
SELECT*FROMAUNIONSELECT*FROMB
不合并重复行
SELECT*FROMAUNIONALLSELECT*FROMB
4、随机排序
SELECT*FROMTestTableORDERBYNEWID()
还可以结合TOP取随机的前N条记录
SELECTTOP100*FROMTestTableORDERBYNEWID()
5、以任意符号分隔取两边数据
例如我们以逗号(,)来分割数据,将如下数据
分割成如下图所示:
SELECTR,CASEWHENCHARINDEX(',',R)>1THENLEFT(R,CHARINDEX(',',R)-1)ELSENULLENDASR1,CASEWHENCHARINDEX(',',R)>1THENRIGHT(R,(LEN(R)-CHARINDEX(',',R)))ELSENULLENDASR2FROMt
代码较长,我们对代码进行拆分来理解:
SELECTCHARINDEX(',',',')--结果是1SELECTCHARINDEX(',','NULL')--结果是0SELECTCHARINDEX(',','')--结果是0SELECTCHARINDEX(',','A,B')--结果是2SELECTLEN('A,B')--结果是3SELECTLEN('A,B')-CHARINDEX(',','A,B')--结果是3-2=1SELECTRIGHT('A,B',(LEN('A,B')-CHARINDEX(',','A,B')))--结果是B
最后一步我们将'A,B'拆分出来了B,同理A我们也可以用类似的方法获取到。
6、WAITFOR延时执行
例 等待1 小时2 分零3 秒后才执行SELECT 语句
WAITFORDELAY'01:02:03'SELECT*FROMEmployee
其中 DELAY是在延时多长时间后才开始执行。
例 等到晚上11 点零8 分后才执行SELECT 语句
WAITFORTIME'23:08:00'SELECT*FROMEmployee
其中TIME是等到具体某个时刻才开始执行
“有哪些SQL查询小技巧”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。