很有意思的SQL多行資料拼接

2022-03-14 15:22:46 字數 1681 閱讀 1904

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

要實現的sql查詢很原始:

要求從第乙個表進行查詢得到第二個**式的資料,上網查詢之後竟然能寫出下面的sql:

select

*from userino

select

*from(

select

[usernames]=

replace(replace(replace((select username as value from userino n

where userpart = a.userpart order

by n.username asc

for xml auto),'

"/>','/')

,'',''),'

"/>

[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

現將sql進行一下分析:

如:

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

*第一段sql顯然是錯的,有兩個原因:1.cross join本來就是無條件的,2. sql server會爆出如下錯誤:

the multi-part identifier "a.username" could not be bound.

select

*from

(select*[

value

]= a.username+

'test

' ) b

for xml auto 主要用於將sql的查詢結果直接返回成xml語句,for xml 除了auto外 還有rawexplicit,詳見《超級簡單:使用for xml auto控制xml輸出》

來實現類似於使用userpart進行分組的效果,來分別篩選出各個userpart中的user,然後由於篩選出的結果是多行,所以使用 for xml 來把多行資料拼接成xml,最後很二的對xml進行拆分....

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

很有意思的SQL多行資料拼接

今天為了實現乙個很原始的問題上網查資料,見到乙個很有意思的sql語句,和大家分享一下 要實現的sql查詢很原始 要求從第乙個表進行查詢得到第二個 式的資料,上網查詢之後竟然能寫出下面的sql 複製 如下 如下 如下 實踐 表資訊 id name age address 1 張三 20 zhangsa...

很有意思的博弈論

一 巴什博奕 bashgame 首先我們來玩乙個比較古老的報數遊戲。a和b一起報數,每個人每次最少報乙個,最多報4個。輪流報數,看誰先報到30.如果不知道巴什博弈的可能會覺得這個是個有運氣成分的問題,但是如果知道的人一定知道怎樣一定可以贏。比如a先報數的話,那麼b一定可以贏 這裡假定b知道怎麼正確的...

一道很有意思的題目

先列出 然後再開始解析 include stdafx.h include using namespace std class a class b public a void seta a data,int idx int tmain int argc,tchar argv for int i 0 i...