国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 很有意思的SQL多行數據拼接

很有意思的SQL多行數據拼接

2019-12-10 14:40MSSQL教程網 Sql Server

今天為了實現一個很原始的問題上網查資料,見到一個很有意思的SQL語句,和大家分享一下

要實現的SQL查詢很原始:

很有意思的SQL多行數據拼接

要求從第一個表進行查詢得到第二個表格式的數據,上網查詢之后竟然能寫出下面的SQL:

復制代碼代碼如下:

select * from userino 

SELECT * FROM( 
SELECT DISTINCT userpart 
FROM userino 
)A 
OUTER APPLY( 
SELECT 
[usernames]= replace(replace(replace((SELECT username as value FROM userino N 
WHERE userpart = A.userpart order by n.username asc FOR XML AUTO),'"/><N value="','/') 
,'<N value="',''),'"/>','') 
)N 
OUTER APPLY( 
SELECT 
[username_cns]= replace(replace(replace((SELECT username_cn as value FROM userino M 
WHERE userpart = A.userpart order by m.username asc FOR XML AUTO),'"/><M value="','/') 
,'<M value="',''),'"/>','') 

)M 


現將SQL進行一下分析: 

總共使用到的點有:OUTER APPLY,FOR XML AUTO。由于對SQL Server沒有很深的研究,所以記錄一下 

OUTER APPLY 是SQL2005開始支持的一種查詢方法,類似于連接查詢,是將兩個查詢結果進行拼接,但是奇特的是,使用OUTER APPLY竟然能夠在Apply后面的查詢中使用前面已經得到的查詢結果。 

如: 

復制代碼代碼如下:

select * from 
(select * from userino) A 
cross join (select username from userino 
where username = A.username )B 

select * from 
(select * from userino) A 
join (select username from userino ) B on a.username = b.username 

select * from 
(select * from userino) A 
OUTER APPLY (select username from userino 
where username = A.username ) B 


第一段SQL顯然是錯的,有兩個原因:1.Cross Join本來就是無條件的,2. SQl Server會爆出如下錯誤: 

The multi-part identifier "A.username" could not be bound. 

大家可能會說有條件的Join查詢本來就不是這樣寫的,應該寫為第二條SQL這樣的樣子,其實這樣寫和第三條SQL中使用Outer apply 實現的效果是一樣的 

可是 Outer Apply還能實現如下的效果 

復制代碼代碼如下:

select * from 
(select * from userino) A 
OUTER APPLY (select [value] = a.username+'test' ) B 


這個恐怕直接使用join就有點麻煩了,上面的例子也許沒什么意義,其實SQL2005提出Apply連接方法主要是為了在連接查詢中使用已經執行的查詢語句的結果 

除了“OUTER APPLY”,SQL Server還有CROSS APPLY,之間的區別主要是在Null值的處理上 

FOR XML AUTO 主要用于將SQL的查詢結果直接返回成XML語句,For Xml 除了auto外 還有RAW和EXPLICIT,詳見《超級簡單:使用FOR XML AUTO控制XML輸出》 

在文章剛開始提出的SQL文,就是使用了上面的兩個特性,首先使用Outer Apply來實現類似于使用userpart進行分組的效果,來分別篩選出各個userpart中的user,然后由于篩選出的結果是多行,所以使用 for xml 來把多行數據拼接成xml,最后很二的對xml進行拆分.... 

綜上,感覺這種實現方式比較獨特,又學習了SQL Server中的一些特性,和大家分享一下.

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 综合激情网 | 亚洲一区二区三区在线播放 | 欧美一区二区激情视频 | 日韩一区中文字幕 | 亚洲毛片在线观看 | 国产91精品一区二区绿帽 | 欧美在线小视频 | 91精品国产综合久久福利 | 国产精品美女久久久久av麻豆 | 精品国产在 | 久久婷婷欧美 | 久久韩国 | 色婷婷综合久久久中文字幕 | 久草福利资源 | 亚洲第一色片 | 国产精彩视频 | 亚洲一区二区三区在线免费观看 | 特黄视频免费观看 | 久久综合久色欧美综合狠狠 | 精品成人免费一区二区在线播放 | 国产精品久久久久永久免费观看 | 久久精品无码一区二区三区 | 日韩中文字幕在线播放 | 欧美 日韩 国产 成人 在线 | 亚洲成av人片在线观看无码 | 久久久久久这里只有精品 | 亚洲精品www久久久久久广东 | 色香阁99久久精品久久久 | 国产精品欧美一区二区三区不卡 | 国产精品久久亚洲 | 精品久久久久久久人人人人传媒 | 亚洲激情在线 | 国产精品成人一区二区三区夜夜夜 | 国产在线精品一区 | 日韩一本| 久久久精品呻吟 | 中文字幕在线免费观看 | 精品国产精品三级精品av网址 | 欧美日韩在线免费观看 | 视频国产一区 | 小视频免费在线观看 |