总结简单实用的SQL脚本
本篇内容主要讲解“总结简单实用的SQL脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“总结简单实用的SQL脚本”吧!
1、行转列的用法PIVOT
CREATEtabletest(idint,namenvarchar(20),quarterint,numberint)insertintotestvalues(1,N'苹果',1,1000)insertintotestvalues(1,N'苹果',2,2000)insertintotestvalues(1,N'苹果',3,4000)insertintotestvalues(1,N'苹果',4,5000)insertintotestvalues(2,N'梨子',1,3000)insertintotestvalues(2,N'梨子',2,3500)insertintotestvalues(2,N'梨子',3,4200)insertintotestvalues(2,N'梨子',4,5500)select*fromtest
结果:
selectID,NAME,[1]as'一季度',[2]as'二季度',[3]as'三季度',[4]as'四季度'fromtestpivot(sum(number)forquarterin([1],[2],[3],[4]))aspvt
结果:
2、列转行的用法UNPIOVT
createtabletest2(idint,namevarchar(20),Q1int,Q2int,Q3int,Q4int)insertintotest2values(1,'苹果',1000,2000,4000,5000)insertintotest2values(2,'梨子',3000,3500,4200,5500)select*fromtest2
(提示:可以左右滑动代码)
结果:
--列转行selectid,name,quarter,numberfromtest2unpivot(numberforquarterin([Q1],[Q2],[Q3],[Q4]))asunpvt
结果:
3、字符串替换SUBSTRING/REPLACE
SELECTREPLACE('abcdefg',SUBSTRING('abcdefg',2,4),'**')
结果:
SELECTREPLACE('13512345678',SUBSTRING('13512345678',4,11),'********')
结果:
SELECTREPLACE('12345678@qq.com','1234567','******')
结果:
4、查询一个表内相同纪录 HAVING
如果一个ID可以区分的话,可以这么写
SELECT * FROM HR.Employees
结果:
select*fromHR.Employeeswheretitlein(selecttitlefromHR.Employeesgroupbytitlehavingcount(1)>1)
结果:
对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录
如果几个ID才能区分的话,可以这么写
select*fromHR.Employeeswheretitle+titleofcourtesyin(selecttitle+titleofcourtesyfromHR.Employeesgroupbytitle,titleofcourtesyhavingcount(1)>1)
结果:
title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了
5、把多行SQL数据变成一条多列数据,即新增列
SELECTid,name,SUM(CASEWHENquarter=1THENnumberELSE0END)'一季度',SUM(CASEWHENquarter=2THENnumberELSE0END)'二季度',SUM(CASEWHENquarter=3THENnumberELSE0END)'三季度',SUM(CASEWHENquarter=4THENnumberELSE0END)'四季度'FROMtestGROUPBYid,name
结果:
我们将原来的4列增加到了6列。细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写法。
6、表复制
语法1:Insert INTO table(field1,field2,...) values(value1,value2,...)
语法2:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。)
语法3:SELECT vale1, value2 into Table2 from Table1
(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。)
语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。
7、利用带关联子查询Update语句更新数据
--方法1:UpdateTable1setc=(selectcfromTable2wherea=Table1.a)wherecisnull--方法2:updateAsetnewqiantity=B.qiantityfromA,BwhereA.bnum=B.bnum--方法3:update(selectA.bnum,A.newqiantity,B.qiantityfromAleftjoinBonA.bnum=B.bnum)ASCsetC.newqiantity=C.qiantitywhereC.bnum='001'
8、连接远程服务器
--方法1:select*fromopenrowset('SQLOLEDB','server=192.168.0.1;uid=sa;pwd=password','SELECT*FROMdbo.test')--方法2:select*fromopenrowset('SQLOLEDB','192.168.0.1';'sa';'password','SELECT*FROMdbo.test')
当然也可以参考以前的示例,建立DBLINK进行远程连接
9、Date 和 Time 样式 CONVERT
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
可以使用的 style 值:
SELECTCONVERT(varchar(100),GETDATE(),0)--结果:12720209:33PMSELECTCONVERT(varchar(100),GETDATE(),1)--结果:12/07/20SELECTCONVERT(varchar(100),GETDATE(),2)--结果:20.12.07SELECTCONVERT(varchar(100),GETDATE(),3)--结果:07/12/20SELECTCONVERT(varchar(100),GETDATE(),4)--结果:07.12.20SELECTCONVERT(varchar(100),GETDATE(),5)--结果:07-12-20SELECTCONVERT(varchar(100),GETDATE(),6)--结果:071220SELECTCONVERT(varchar(100),GETDATE(),7)--结果:1207,20SELECTCONVERT(varchar(100),GETDATE(),8)--结果:21:33:18SELECTCONVERT(varchar(100),GETDATE(),9)--结果:12720209:33:18:780PMSELECTCONVERT(varchar(100),GETDATE(),10)--结果:12-07-20SELECTCONVERT(varchar(100),GETDATE(),11)--结果:20/12/07SELECTCONVERT(varchar(100),GETDATE(),12)--结果:201207SELECTCONVERT(varchar(100),GETDATE(),13)--结果:0712202021:33:18:780SELECTCONVERT(varchar(100),GETDATE(),14)--结果:21:33:18:780SELECTCONVERT(varchar(100),GETDATE(),20)--结果:2020-12-0721:33:18SELECTCONVERT(varchar(100),GETDATE(),21)--结果:2020-12-0721:33:18.780SELECTCONVERT(varchar(100),GETDATE(),22)--结果:12/07/209:33:18PMSELECTCONVERT(varchar(100),GETDATE(),23)--结果:2020-12-07SELECTCONVERT(varchar(100),GETDATE(),24)--结果:21:33:18SELECTCONVERT(varchar(100),GETDATE(),25)--结果:2020-12-0721:33:18.780SELECTCONVERT(varchar(100),GETDATE(),100)--结果:12720209:33PMSELECTCONVERT(varchar(100),GETDATE(),101)--结果:12/07/2020SELECTCONVERT(varchar(100),GETDATE(),102)--结果:2020.12.07SELECTCONVERT(varchar(100),GETDATE(),103)--结果:07/12/2020SELECTCONVERT(varchar(100),GETDATE(),104)--结果:07.12.2020SELECTCONVERT(varchar(100),GETDATE(),105)--结果:07-12-2020SELECTCONVERT(varchar(100),GETDATE(),106)--结果:07122020SELECTCONVERT(varchar(100),GETDATE(),107)--结果:1207,2020SELECTCONVERT(varchar(100),GETDATE(),108)--结果:21:33:18SELECTCONVERT(varchar(100),GETDATE(),109)--结果:12720209:33:18:780PMSELECTCONVERT(varchar(100),GETDATE(),110)--结果:12-07-2020SELECTCONVERT(varchar(100),GETDATE(),111)--结果:2020/12/07SELECTCONVERT(varchar(100),GETDATE(),112)--结果:20201207SELECTCONVERT(varchar(100),GETDATE(),113)--结果:0712202021:33:18:780SELECTCONVERT(varchar(100),GETDATE(),114)--结果:21:33:18:780SELECTCONVERT(varchar(100),GETDATE(),120)--结果:2020-12-0721:33:18SELECTCONVERT(varchar(100),GETDATE(),121)--结果:2020-12-0721:33:18.780
到此,相信大家对“总结简单实用的SQL脚本”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。