中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

很有意思的SQL多行數(shù)據(jù)拼接 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.szmdbiao.com - 電腦資料】

   

    要實現(xiàn)的SQL查詢很原始:

   

    要求從第一個表進(jìn)行查詢得到第二個表格式的數(shù)據(jù),上網(wǎng)查詢之后竟然能寫出下面的SQL:

    復(fù)制代碼代碼如下:

    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

    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

    現(xiàn)將SQL進(jìn)行一下分析:

    總共使用到的點有:OUTER APPLY,F(xiàn)OR XML AUTO,

很有意思的SQL多行數(shù)據(jù)拼接

。由于對SQL Server沒有很深的研究,所以記錄一下

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

    如:

    復(fù)制代碼代碼如下:

    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查詢本來就不是這樣寫的,應(yīng)該寫為第二條SQL這樣的樣子,其實這樣寫和第三條SQL中使用Outer apply 實現(xiàn)的效果是一樣的

    可是 Outer Apply還能實現(xiàn)如下的效果

    復(fù)制代碼代碼如下:

    select * from

    (select * from userino) A

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

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

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

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

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

    綜上,感覺這種實現(xiàn)方式比較獨特,又學(xué)習(xí)了SQL Server中的一些特性,和大家分享一下

    QQ空間 搜狐微博 人人網(wǎng) 開心網(wǎng) 百度搜藏更多

    Tags:SQL 數(shù)據(jù)拼接

    復(fù)制鏈接收藏本文打印本文關(guān)閉本文返回首頁

    上一篇:設(shè)置密碼保護(hù)的SqlServer數(shù)據(jù)庫備份文件與恢復(fù)文件的方法

    下一篇:SQL SERVER 2000通訊管道后復(fù)用劫持

   

相關(guān)文章

2010-06-06SQLServer中臨時表與表變量的區(qū)別分析

2013-01-01SQLserver中用convert函數(shù)轉(zhuǎn)換日期格式的方法

2012-12-12SQL數(shù)據(jù)庫日志已滿解決方法

2012-10-10Sql Server中存儲過程中輸入和輸出參數(shù)(簡單實例 一看就懂)

2012-07-07sqlserver數(shù)據(jù)庫主鍵的生成方式小結(jié)(sqlserver,mysql)

2012-10-10delete from 表名與truncate table 表名區(qū)別

2012-06-06在SQL Server中使用SQL語句查詢一個存儲過程被其它所有的存儲過程

2009-07-07數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過程中大對象的處理

2007-01-01最長用最基本的MSSQL數(shù)據(jù)庫備份與還原

2013-09-09判斷數(shù)據(jù)庫表是否存在以及修改表名的方法

   

文章評論

   

最 近 更 新

   

SQL判斷字段列是否存在的方法

使用xp_cmdshell注銷Windows登錄用戶(終端

sqlserver 系統(tǒng)存儲過程 中文說明

顯示 Sql Server 中所有表中的信息

通過sql存儲過程發(fā)送郵件的方法

在SQL Server中使用命令調(diào)用SSIS包的具體

通過分析SQL語句的執(zhí)行計劃優(yōu)化SQL

sql查詢出各科成績最好的學(xué)生信息

快速插入大量數(shù)據(jù)的asp.net代碼(Sqlserve

uniqueidentifier轉(zhuǎn)換成varchar數(shù)據(jù)類型的

   

熱 點 排 行

   

SQL Server 2008圖文安裝教程

SQL Server 2012 安裝圖解教程(附

sqlserver中distinct的用法(不重

SQL Server導(dǎo)入、導(dǎo)出、備份數(shù)據(jù)

SQL語句去掉重復(fù)記錄,獲取重復(fù)記

SQL Server數(shù)據(jù)庫入門學(xué)習(xí)總結(jié)

SQL Server錯誤代碼大全及解釋(

sql convert函數(shù)使用小結(jié)

sql 時間函數(shù) 整理的比較全了

用SQL語句添加刪除修改字段、一些

最新文章