转载请联系SQL数据库开发公众号。1.行到列PIVOTCREATEtabletest(idint,namenvarchar(20),quarterint,numberint)insertintotestvalues(1,N'apple',1,1000)insertintotestvalues(1,N'apple',2,2000)insertintotestvalues(1,N'apple',2,2000)insertintotestvalues(1,N'苹果',2,2000)N'苹果',3,4000)插入测试值(1,N'苹果',4,5000)插入测试值(2,N'梨',1,3000)插入测试值(2,N'pear',2,3500)insertintotestvalues(2,N'Pear',3,4200)insertintotestvalues(2,N'Pear',4,5500)select*fromtestresult:selectID,NAME,[1]as'FirstQuarter',[2]as'SecondQuarter',[3]as'thirdquarter',[4]as'fourthquarter'fromtestpivot(sum(number)forquarterin([1],[2],[3],[4]))aspvtresult:2,rowtransferUsageUNPIOVTcreatetabletest2(idint,namevarchar(20),Q1int,Q2int,Q3int,Q4int)insertintotest2values(1,'Apple',1000,2000,4000,5000)insertintotest2values(2,'Pear',3000,3500,4200,5500)select*fromtest2(提示:可以左右滑动代码)Result:--columntorowselectid,name,quarter,numberfromtest2unpivot(numberforquarterin([Q1],[Q2],[Q3],[Q4]))asunpvt结果:3,Str正在替换SUBSTRING/REPLACESELECTREPLACE('abcdefg',SUBSTRING('abcdefg',2,4),'**')结果:SELECTREPLACE('13512345678',SUBSTRING('13512345678',4,11),'********')结果:SELECTREPLACE('12345678@qq.com','1234567','******')结果:4.查询同一个表中HAVING的记录如果能区分一个ID,可以这样写SELECT*FROMHR像这样。Employeesresult:select*fromHR.Employeeswheretitlein(selecttitlefromHR.Employeesgroupbytitlehavingcount(1)>1)result:比较发现ID1和2被过滤掉了,因为他们只有一条记录。如果能区分几个ID,可以这样写select*fromHR.Employeeswheretitle+titleofcourtesyin(selecttitle+titleofcourtesyfromHR.Employeesgroupbytitle,titleofcourtesyhavingcount(1)>1)结果:title与titleofcourtesy拼接后,只有ids的分别是6,7,8,9满足条件。多行SQL数据变成多列数据,即添加列SELECTid,name,SUM(CASEWHENquarter=1THENnumberELSE0END)'第一季度',SUM(CASEWHENquarter=2THENnumberELSE0END)'第二季度',SUM(CASEWHENquarter=3THENnumberELSE0END)'thirdquarter',SUM(CASEWHENquarter=4THENnumberELSE0END)'Fourthquarter'FROMtestGROUPBYid,name结果:我们把原来的4列增加到6列。细心的朋友可能会发现,这个结果和上面的行转列的转换是一模一样的吗?其实上面的行转列是一种省略的写法,是一种比较常见的写法。6.表格复制语法1:InsertINTOtable(field1,field2,...)values(value1,value2,...)语法2:InsertintoTable2(field1,field2,...)selectvalue1,value2,。..fromTable1(目标表Table2必须存在,因为目标表Table2已经存在,所以我们可以在源表Table1的字段之外插入常量。)语法3:SELECTvale1,value2intoTable2fromTable1(需要targetTableTable2不存在,因为插入时会自动创建Table2,将Table1中的指定字段数据复制到Table2中。)语法4:使用导入导出功能复制整个表。如果使用【写一个查询来指定要传输的数据】,那么大数据表的复制会有问题吗?因为复制到一定程度就会停止移动,内存会爆炸?它也不会被写入表中。而如果直接使用以上三种语法执行,会立即刷新到数据库表中,刷新mdf文件就知道了。7、使用关联子查询的Update语句更新数据--方法一:UpdateTable1setc=(selectcfromTable2wherea=Table1.a)wherecisnull--方法二:updateAsetnewqiantity=B.qiantityfromA,BwhereA.bnum=B.bnum--方法三:update(selectA.bnum,A.newqiantity,B.qiantityfromAleftjoinBonA.bnum=B.bnum)ASCsetC.newqiantity=C.qiantitywhereC.bnum='001'8.连接到远程服务器——方法一:select*fromopenrowset('SQLOLEDB','server=192.168.0.1;uid=sa;pwd=password','SELECT*FROMdbo.test')--方法二:select*fromopenrowset('SQLOLEDB','192.168.0.1';'sa';'password','SELECT*FROMdbo.test')当然也可以参考前面的例子,为远程连接建立DBLINK9、日期时间样式CONVERTCONVERT()函数是一个通用函数,将日期转换成新的数据类型。CONVERT()函数可以显示不同格式的日期/时间数据。语法CONVERT(data_type(length),data_to_be_converted,style)data_type(length)指定目标数据类型(长度可选)。data_to_be_converted包含要转换的值。style指定日期/时间输出格式。可用样式值:样式ID样式格式100或0monddyyyyhh:miAM(或PM)101mm/dd/yy102yy.mm.dd103dd/mm/yy104dd.mm.yy105dd-mm-yy106ddmonyy107Mondd,yy108hh:mm:ss109or9monddyyyyhh:mi:ss:mmmAM(orPM)110mm-dd-yy111yy/mm/dd112yymmdd113or13ddmonyyyyhh:mm:ss:mmm(24h)114hh:mi:ss:mmm(24h)120或20yyyy-mm-ddhh:mi:ss(24h)121或21yyyy-mm-ddhh:mi:ss.mmm(24h)126yyyy-mm-ddThh:mm:ss.mmm(无空格)130ddmonyyyyhh:mi:ss:mmmAM131dd/mm/yyhh:mi:ss:mmmAMSELECTCONVERT(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),获取日期(),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)--结果:2020年12月7日SELECTCONVERT(varchar(100),GETDATE(),105)--结果:2020年7月12日SELECTCONVERT(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)--Result:2020-12-0721:33:18.780以上内容是工作中比较常用的,能记住的,记不住的最好保存,以及您可以在需要时查询它。
