亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

關于SQL的幾道小題詳解(sql進階)

2024-08-31 01:02:57
字體:
來源:轉載
供稿:網友

當我們拿到題目的時候,并不是急于作答,那樣會得不償失的,而是分析思路,采用什么方法,達到什么目的,還要思考有沒有簡單的方法或者通用的方法等等,這樣才會達到以一當十的效果,這樣的慣性思維其實早在我們度高中的時候就被領教了,所謂“萬變不離其宗”吧。以下各題來自日常所見,或QQ群,或面試題,或博客園。

題目一:如下表所示,現需要按照收款員統計收款和退款合計金額。

關于SQL的幾道小題詳解(sql進階)

實現結果需如下顯示:

分析:想要的結果(記為表B)和源數據(記為表A)相比,有共同的列(收款員),不同的是表A的金額根據標記和收款員分成了兩列,所以這個需求可以用語言表述一下:首先根據收款員分組(group by),然后當標記為“收”時,金額計入收款合計(sum);當標記為“退”時,金額計入退款合計(sum)。當……時……,這不就是SQL的條件判斷嘛?盤點SQL的條件語句不多,if……else……和case……when……then……else……end。這樣問題就迎刃而解了。

解決方案如下:

with ta as(select '收' as 標記,'100' as 收款員,150 as 金額 union select '收','100',375 union select '退','100',78 union select '收','200',74)select 收款員,sum(case when 標記='收' then 金額 else 0 end) as 收款合計, sum(case when 標記='退' then 金額 else 0 end) as 退款合計 from ta group by 收款員

題目二:如下表A(左邊)職員信息表,其中ID為職員工號,name為職員姓名;表B(右邊)為職員任務分配表,其中ID為職員工號(和表A中ID對應),Task為任務編號。

關于SQL的幾道小題詳解(sql進階)

關于SQL的幾道小題詳解(sql進階)

現需求每個職員的任務數。結果如下顯示:

關于SQL的幾道小題詳解(sql進階)

其實原題是這樣的:只有一張表B,求求每個職員的任務數。沒有找到比較好的方法實現,不做討論,歡迎高人指點。

分析:此題的難點在于表B中的ID復雜表示,其實這樣有悖于數據庫的設計原則,理應表A和表B的ID一一對應。既然是題,我們只能從當前的條件入手了,攻破難點的關鍵在于判斷A中ID在B中ID出現與否,如果出現那么如何統計出現的次數。判斷出現與否需要用到函數CHARINDEX。

解決方案如下:

--創建測試數據WITH TAAS(SELECT '1,2' AS ID,'job1' AS taskUNION SELECT '1,2,3','job3'UNION SELECT '2,3','job2'UNION SELECT '3,4,5','job4'),TB AS (SELECT '1' AS ID,'張三' as nameUNION SELECT '2','王二'UNION SELECT '3','李四'UNION SELECT '4','李明'UNION SELECT '5','王五')SELECT B.ID,B.name,COUNT(1) AS TASKS FROM TA A,TB B WHERE CHARINDEX(B.ID,A.ID)>0 GROUP BY B.ID,B.name order by B.ID

題目三:原題參見這篇文章:

如下表City所示,code為行政區域碼(六位數字,前兩代表省級,中間兩位代表市級,最后兩位代表縣級,不考慮xx00xx情況),city為城市名稱,CCode為該城市所屬的省級或者市級行政區域碼。

關于SQL的幾道小題詳解(sql進階)

現需求如下結果:

關于SQL的幾道小題詳解(sql進階)

分析:分析表city,code的含義十分明顯,所需要的結果也很明顯,如果是省就是顯示省份;是市則顯示為所屬省級+市級;是縣級則顯示為所屬省級+所屬市級+縣級。貌似可以用題目一分析中提到的SQL條件語句實現,但是轉念一想,還是有差別,這里需要先判斷city屬于省級?市級?縣級?然后在對應起來的,這樣還得有參照表,復雜了?;氐浇Y果表中來進行分析,其實判定city屬于省市縣的問題并不難,code的含義已經說明了,只要轉換表述:在表City中,當code的后四位為“0000”時,肯定是省級;當code的后兩位為“00”,并且后四位不為“0000”時,肯定是市級;當code后兩位不為“00”時,為縣級。這樣省市縣的判定就一目了然了,然后,根據市級編碼追朔所屬的省級,并得出所屬省級+市級,縣級追朔所屬的市級,得出所屬省級+所屬市級+所屬縣級,通過運用這種簡單的遞歸思想,解決方案便躍然紙上了。

解決方案如下:

--測試數據with ta as(select '110000' as code, '北京市' city, '110000' Ccodeunionselect N'110200', N'西城區', N'110200'unionselect N'110300', N'崇文區', N'110300'unionselect N'430000', N'湖南省', N'430000'unionselect N'430100', N'長沙市', N'430100'unionselect N'430101', N'望城縣', N'430100')select * into City from taselect * from City;--解決方案with taas(--省級select code,city,Ccode,city content from City where right(code,4)='0000'),tb as(--市級select b.code,b.city,b.Ccode,a.city+','+b.city as content from ta a,City b where left(a.Ccode,2)=left(b.Ccode,2)and right(b.code,2)='00' and right(b.code,4)<>'0000'),tc as(select c.code,c.city,c.Ccode,b.content+','+c.city content from tb b,City c where left(b.Ccode,4)=left(c.Ccode,4)and right(c.code,2)<>'00')select * from taunionselect * from tbunionselect * from tc

通過上述幾道小題,常思常新,溫故了SQL的部分知識,當然方法很多,變式很多,如題目二統計表B中每個Task的人數等。不足之處,歡迎各位指點!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看免费全集电视剧网站| 午夜精品久久久久久99热软件| 欧美激情在线观看视频| 国产91在线播放精品91| 日韩中文字幕免费看| 97在线视频国产| 久久香蕉精品香蕉| 国产精品高潮在线| 亚洲电影免费观看高清| 久久免费少妇高潮久久精品99| 亚洲国产精品久久久久秋霞蜜臀| 久久久精品国产亚洲| 国产v综合v亚洲欧美久久| 欧美成年人在线观看| 欧美高清在线观看| 一区二区三欧美| 国产精品久久久久久久9999| 欧美激情啊啊啊| 久久成人av网站| 日韩欧美一区二区三区久久| 91精品国产乱码久久久久久久久| 欧美亚洲国产视频小说| 91在线无精精品一区二区| 日韩中文有码在线视频| 亚洲午夜小视频| 日韩电影在线观看永久视频免费网站| 91麻豆桃色免费看| 久久久国产91| 亚洲精品白浆高清久久久久久| 国产精品美女午夜av| 久久视频中文字幕| 国产精品丝袜白浆摸在线| 国产日韩欧美综合| 欧美性20hd另类| 成人在线视频网| 亚洲毛茸茸少妇高潮呻吟| 精品国产乱码久久久久久婷婷| 国产欧美日韩视频| 欧美日韩视频免费播放| 欧美激情网站在线观看| 日韩欧美中文字幕在线观看| 国产精品手机播放| 日韩三级影视基地| 亚洲成色777777女色窝| 国产视频自拍一区| 成人性生交xxxxx网站| 91综合免费在线| 久久久亚洲福利精品午夜| 日韩视频免费在线观看| 成人国产精品日本在线| 欧美野外wwwxxx| 亚洲日韩欧美视频| 久久6免费高清热精品| 55夜色66夜色国产精品视频| 日韩免费视频在线观看| 伊人久久久久久久久久| 一本大道亚洲视频| 91精品国产高清久久久久久久久| 亚洲欧洲高清在线| 91av视频导航| 国产亚洲一区二区在线| 欧美激情第99页| 色综合天天综合网国产成人网| 国产精品一区二区久久精品| 欧美大成色www永久网站婷| 日韩大陆欧美高清视频区| 欧美成人一二三| 欧美性xxxx极品hd满灌| 欧美激情精品久久久久久久变态| 精品国产一区二区在线| 国产日韩精品电影| 一区二区欧美在线| 久久久人成影片一区二区三区观看| 久久这里只有精品视频首页| 日韩专区中文字幕| 亚洲国产精品高清久久久| 日本视频久久久| 国产99久久精品一区二区 夜夜躁日日躁| 欧美性高跟鞋xxxxhd| 色偷偷噜噜噜亚洲男人的天堂| 成人黄色免费片| 欧美日韩国内自拍| 欧美精品制服第一页| 欧美日本在线视频中文字字幕| 成人免费看片视频| 色噜噜国产精品视频一区二区| 日韩美女视频在线观看| 日本亚洲欧美三级| 欧美激情中文字幕乱码免费| 日本最新高清不卡中文字幕| 亚洲xxxx18| 国产精品久久久久久久久久久久久| 亚洲国产精品99| 久久久国产精品视频| 国产午夜精品全部视频播放| 精品国产精品自拍| 国产精品日韩久久久久| 日韩免费在线观看视频| 亚洲aⅴ男人的天堂在线观看| 亚洲女人天堂成人av在线| 日韩av电影在线播放| 成人h视频在线观看播放| 欧美激情一二区| 久久露脸国产精品| 久久夜色撩人精品| 欧美精品福利视频| 少妇精69xxtheporn| 国产专区精品视频| 亚洲毛片在线免费观看| 欧美国产日韩一区二区三区| 免费不卡欧美自拍视频| 欧美在线性爱视频| 久久伊人91精品综合网站| 国产suv精品一区二区三区88区| 欧美午夜宅男影院在线观看| 国产精品久久网| 国产精品对白刺激| 一区二区三区回区在观看免费视频| 中文字幕一区电影| 日韩精品在线第一页| 日韩在线播放av| 亚洲人成77777在线观看网| 久热国产精品视频| 狠狠久久五月精品中文字幕| 国产丝袜视频一区| 欧美日韩在线视频观看| 久久精品国产精品| 久久久久久中文字幕| 欧美电影在线观看| 日韩乱码在线视频| 久久香蕉国产线看观看网| 欧美精品在线观看91| 精品国产美女在线| 国产不卡精品视男人的天堂| 国产91精品高潮白浆喷水| 中文字幕日韩专区| 国产成人精品av| 久久99精品国产99久久6尤物| 国产视频一区在线| 亚洲欧美中文在线视频| 精品日韩视频在线观看| 精品国产网站地址| 国内精品久久久久影院优| 国产精品久久国产精品99gif| 韩国一区二区电影| 在线播放国产精品| 97久久超碰福利国产精品…| 最新日韩中文字幕| 欧美孕妇孕交黑巨大网站| 国产成人短视频| 992tv成人免费影院| 91伊人影院在线播放| 日本久久久a级免费| 5566日本婷婷色中文字幕97| 在线观看91久久久久久| 韩国三级日本三级少妇99| 欧美老妇交乱视频| 国产精品久久久久久久久久新婚| 欧美精品精品精品精品免费| 亚洲国产精品成人av| 亚洲国产精品va| 日韩成人xxxx| 亚洲xxxxx性| 国产成人福利视频|