本篇内容主要讲解“总结简单实用的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 值:

Style IDStyle 格式100 或者 0mon dd yyyy hh:miAM (或者 PM)101mm/dd/yy102yy.mm.dd103dd/mm/yy104dd.mm.yy105dd-mm-yy106dd mon yy107Mon dd, yy108hh:mm:ss109 或者 9mon dd yyyy hh:mi:ss:mmmAM(或者 PM)110mm-dd-yy111yy/mm/dd112yymmdd113 或者 13dd mon yyyy hh:mm:ss:mmm(24h)114hh:mi:ss:mmm(24h)120 或者 20yyyy-mm-dd hh:mi:ss(24h)121 或者 21yyyy-mm-dd hh:mi:ss.mmm(24h)126yyyy-mm-ddThh:mm:ss.mmm(没有空格)130dd mon yyyy hh:mi:ss:mmmAM131dd/mm/yy hh:mi:ss:mmmAM

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脚本”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!