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新聞熱點
疑難解答