首页 > 开发 > 综合 > 正文

实用的SQL语句

2024-07-21 02:48:45
字体:
来源:转载
供稿:网友
实用的SQL语句行列互转复制代码createtabletest(idint,namevarchar(20),quarterint,PRofileint)insertintotestvalues(1,'a',1,1000)insertintotestvalues(1,'a',2,2000)insertintotestvalues(1,'a',3,4000)insertintotestvalues(1,'a',4,5000)insertintotestvalues(2,'b',1,3000)insertintotestvalues(2,'b',2,3500)insertintotestvalues(2,'b',3,4200)insertintotestvalues(2,'b',4,5500)select*fromtest--行转列selectid,name,[1]as"一季度",[2]as"二季度",[3]as"三季度",[4]as"四季度",[5]as"5"fromtestpivot(sum(profile)forquarterin([1],[2],[3],[4],[5]))aspvtcreatetabletest2(idint,namevarchar(20),Q1int,Q2int,Q3int,Q4int)insertintotest2values(1,'a',1000,2000,4000,5000)insertintotest2values(2,'b',3000,3500,4200,5500)select*fromtest2--列转行selectid,name,quarter,profilefromtest2unpivot(profileforquarterin([Q1],[Q2],[Q3],[Q4]))asunpvt复制代码

sql替换字符串 substring replace复制代码--例子1:updatetbPersonalInfosetTrueName=replace(TrueName,substring(TrueName,2,4),'**')whereID=1--例子2:updatetbPersonalInfosetMobile=replace(Mobile,substring(Mobile,4,11),'********')whereID=1--例子3:updatetbPersonalInfosetEmail=replace(Email,'chinamobile','******')whereID=1复制代码

SQL查询一个表内相同纪录 having如果一个ID可以区分的话,可以这么写select*from表whereIDin(selectIDfrom表groupbyIDhavingsum(1)>1)如果几个ID才能区分的话,可以这么写select*from表whereID1+ID2+ID3in(selectID1+ID2+ID3from表groupbyID1,ID2,ID3havingsum(1)>1)其他回答:数据表是zy_bho,想找出ZYH字段名相同的记录复制代码--方法1:SELECT*FROMzy_bhoaWHEREEXISTS(SELECT1FROMzy_bhoWHERE[PK]<>a.[PK]ANDZYH=a.ZYH)--方法2:selecta.*fromzy_bhoajoinzy_bhobon(a.[pk]<>b.[pk]anda.zyh=b.zyh)--方法3:select*fromzy_bbowherezyhin(selectzyhfromzy_bbogroupbyzyhhavingcount(zyh)>1)--其中pk是主键或是unique的字段。复制代码把多行SQL数据变成一条多列数据,即新增列复制代码SelectDeptName=O.OUName,'9G'=Sum(CaseWhenPersonalGrade=9Then1Else0End),'8G'=Sum(CaseWhenPersonalGrade=8Then1Else0End),'7G4'=Sum(CaseWhenPersonalGrade=7ANDJobGrade=4Then1Else0End),'7G3'=Sum(CaseWhenPersonalGrade=7ANDJobGrade=3Then1Else0End),'6G'=Sum(CaseWhenPersonalGrade=6Then1Else0End),'5G3'=Sum(CaseWhenPersonalGrade=5ANDJobGrade=3Then1Else0End),'5G2'=Sum(CaseWhenPersonalGrade=5ANDJobGrade=2Then1Else0End),'4G'=Sum(CaseWhenPersonalGrade=4Then1Else0End),'3G2'=Sum(CaseWhenPersonalGrade=3ANDJobGrade=2Then1Else0End),'3G1'=Sum(CaseWhenPersonalGrade=3ANDJobGrade=1Then1Else0End),'2G'=Sum(CaseWhenPersonalGrade=2Then1Else0End),'1G'=Sum(CaseWhenPersonalGrade=1Then1Else0End),--'未定级'=Sum(CaseWhenPersonalGrade=NULLThen1Else0End)复制代码

表复制insertintoPhoneChange_Num([IMSI],Num)SELECT[IMSI],count([IMEI])asnumFROM[Test].[dbo].[PhoneChange]groupby[IMSI]orderbynumdesc

语法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文件就知道了。

利用带关联子查询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=XX复制代码

连接远程服务器--方法1:select*fromopenrowset('SQLOLEDB','server=192.168.0.67;uid=sa;pwd=passWord','SELECT*FROMBCM2.dbo.tbAppl')--方法2:select*fromopenrowset('SQLOLEDB','192.168.0.67';'sa';'password','SELECT*FROMBCM2.dbo.tbAppl')

Date 和 Time 样式

不带世纪数位 (yy) (1) 带世纪数位 (yyyy) 标准 输入/输出 (3)

-

0100 (1,2)

默 认

mon dd yyyy hh:miAM(或 PM)

1

101

美 国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英 国/法国

dd/mm/yyyy

4

104

德 国

dd.mm.yy

5

105

意 大利

dd-mm-yy

6

106(1)

-

dd mon yy

7

107(1)

-

mon dd, yy

8

108

-

hh:mi:ss

-

9109 (1,2)

默 认设置 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美 国

mm-dd-yy

11

111

日 本

yy/mm/dd

12

112

ISO

yymmdd

yyyymmdd

-

13113 (1,2)

欧 洲默认设置 + 毫秒

dd mon yyyy hh:mi:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20120 (2)

ODBC 规范

yyyy-mm-dd hh:mi:ss(24h)

-

21121 (2)

ODBC 规范(带毫秒)

yyyy-mm-dd hh:mi:ss.mmm(24h)

-

126 (4)

ISO8601

yyyy- mm-ddThh:mi:ss.mmm(无空格)

-

127(6, 7)

带时区 Z 的 ISO8601。

yyyy-mm-ddThh:mi:ss.mmmZ

(无 空格)

-

130 (1,2)

回历 (5)

dd mon yyyy hh:mi:ss:mmmAM

-

131 (2)

回历 (5)

dd/mm/yy hh:mi:ss:mmmAM

复制代码--语句及查询结果:SELECTCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSELECTCONVERT(varchar(100),GETDATE(),1):05/16/06SELECTCONVERT(varchar(100),GETDATE(),2):06.05.16SELECTCONVERT(varchar(100),GETDATE(),3):16/05/06SELECTCONVERT(varchar(100),GETDATE(),4):16.05.06SELECTCONVERT(varchar(100),GETDATE(),5):16-05-06SELECTCONVERT(varchar(100),GETDATE(),6):160506SELECTCONVERT(varchar(100),GETDATE(),7):0516,06SELECTCONVERT(varchar(100),GETDATE(),8):10:57:46SELECTCONVERT(varchar(100),GETDATE(),9):0516200610:57:46:827AMSELECTCONVERT(varchar(100),GETDATE(),10):05-16-06SELECTCONVERT(varchar(100),GETDATE(),11):06/05/16SELECTCONVERT(varchar(100),GETDATE(),12):060516SELECTCONVERT(varchar(100),GETDATE(),13):1605200610:57:46:937SELECTCONVERT(varchar(100),GETDATE(),14):10:57:46:967SELECTCONVERT(varchar(100),GETDATE(),20):2006-05-1610:57:47SELECTCONVERT(varchar(100),GETDATE(),21):2006-05-1610:57:47.15
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表