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) |
|---|---|---|---|
- | 0 或 100 (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 |
- | 9 或 109 (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 |
- | 13 或 113 (1,2) | 欧 洲默认设置 + 毫秒 | dd mon yyyy hh:mi:ss:mmm(24h) |
14 | 114 | - | hh:mi:ss:mmm(24h) |
- | 20 或 120 (2) | ODBC 规范 | yyyy-mm-dd hh:mi:ss(24h) |
- | 21 或 121 (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新闻热点
疑难解答