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

首頁 > 開發 > 綜合 > 正文

MSSQL—列記錄合并成一行

2024-07-21 02:46:15
字體:
來源:轉載
供稿:網友
MSSQL—列記錄合并成一行

在項目開發中,有時會碰到將列記錄合并為一行的情況,例如根據地區將人員姓名合并,或根據拼音首字母合并城市等,下面就以根據地區將人員姓名合并為例,詳細講一下合并的方法。

首先,先建一個表,并添加一些數據,建表代碼如下:

If OBJECT_ID(N'Demo') Is Not Null Begin Drop Table Demo EndElse Begin Create Table Demo( Area nvarchar(30), Name nvarchar(20))

Insert Into Demo(Area,Name) Values(N'北京',N'張三'), (N'上海',N'李四'), (N'深圳',N'王五'), (N'深圳',N'錢六'), (N'北京',N'趙七'), (N'北京','Tom'), (N'上海','Amy'), (N'北京','Joe'), (N'深圳','Leo') EndGo

建完后查詢一下,可見表中數據如下:

image

如果僅將Name列合并,不遵循任何條件的話,我們可以采用兩種方法,第一種就是采用FOR xml PATH方式,代碼如下:

SELECT ','+Name FROM dbo.Demo FOR XML PATH('')

運行結果如下:

image

關于FOR XML PATH的詳細介紹可參考MSDN:搭配 FOR XML 使用 PATH 模式

第二種方法就是定義一個變量用來裝載查詢的結果,代碼如下:

Declare @NameCollection nvarchar(500)Select @NameCollection=ISNULL(@NameCollection+',','')+Name From dbo.DemoSelect @NameCollection as NameCollection

運行結果如下:

image

加了ISNULL是因為最開始變量@NameCollection為NULL,為了避免“張三”前多一個逗號(“,”)而采用的替換。

上面講了在無條件的情況下合并一列,但是在項目中幾乎不會遇到這樣的情況,一般都是根據某一列來合并另一列的數據,例如我們現在要根據Area將Name合并,得到這樣的結果:

image

有了上面的基礎,要合并成這樣的數據就容易了,我們只需要針對Area列采用聚合GROUP BY或取不重復值DISTINCT,然后根據Area列合并Name列,有了思路,下面就來說說如何實現,首先還是采用FOR XML PATH方式,結合自連接,首先先按Area列對Name列進行合并,代碼如下:

SELECT Area,(SELECT ','+Name FROM dbo.Demo WHERE Area = t.Area FOR XML PATH(''))AS NameCollection FROM dbo.Demo AS t

運行結果如下:

image

現在有兩點還沒實現,第一是結果重復了,第二是NameCollection列最開始都多了一個逗號,先去掉逗號,采用STUFF 函數來進行替換,代碼修改如下:

SELECT Area,STUFF((SELECT ','+Name FROM dbo.Demo WHERE Area = t.Area FOR XML PATH('')),1,1,'')AS NameCollection FROM dbo.Demo AS t

現在運行后結果如下:

image

下面就剩下去掉重復數據了,分別采用GROUP BY和DISTINCT,代碼如下:

SELECT DISTINCT Area,STUFF((SELECT ','+Name FROM dbo.Demo WHERE Area = t.Area FOR XML PATH('')),1,1,'')AS NameCollection FROM dbo.Demo AS t

SELECT Area,STUFF((SELECT ','+Name FROM dbo.Demo WHERE Area = t.Area FOR XML PATH('')),1,1,'')AS NameCollection FROM dbo.Demo AS t GROUP BY Area

關于STUFF函數可以參考MSDN介紹:STUFF函數

運行結果即為最終我們需要的結果,最開始在上面講到了一種用變量來裝載查詢結果實現合并一列的方法,下面詳細介紹如何采用上述方法來實現我們的需求,我們可以根據上面的方法建一個函數,傳入一個Area參數,根據Area來進行合并,返回合并值,函數如下:

CREATE FUNCTION MergeByColumn( -- Add the parameters for the function here @Area nvarchar(30))RETURNS nvarchar(500)ASBEGIN -- Declare the return variable here DECLARE @NC nvarchar(500)

-- Add the T-SQL statements to compute the return value here SELECT @NC=ISNULL(@NC+',','')+Name FROM dbo.Demo WHERE Area=@Area

-- Return the result of the function RETURN @NC

ENDGO

建好后測試下,以傳入參數為“北京”為例,運行如下代碼:

SELECT dbo.MergeByColumn('北京') AS NameCollection

得到結果如下:

image

現在只需將Area列也加入查詢即可,修改代碼如下:

SELECT Area,dbo.MergeByColumn(Area) AS NameCollection From dbo.Demo

現在也得到了重復的結果,如下:

image

去重復同樣可以用GROUP BY和DISTINCT,代碼如下,即可以得到我們最終的結果:

SELECT DISTINCT Area,dbo.MergeByColumn(Area) AS NameCollection From dbo.Demo

SELECT Area,dbo.MergeByColumn(Area) AS NameCollection From dbo.Demo GROUP BY Area

本文轉自:http://www.cnblogs.com/leolis/p/3977569.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频在线观看视频| 亚洲国产中文字幕久久网| 国产一区二区黑人欧美xxxx| 国产欧美日韩免费看aⅴ视频| 九九热99久久久国产盗摄| 国产精品欧美激情在线播放| 久久久久久久久久久亚洲| 精品久久久久久久久中文字幕| 911国产网站尤物在线观看| 国产精品久久久久久av福利软件| 永久免费精品影视网站| 日韩在线视频播放| 亚洲第一精品夜夜躁人人爽| 亚洲最新av在线网站| 韩曰欧美视频免费观看| 精品国内自产拍在线观看| 国产一区二区丝袜| 欧美激情精品久久久久久变态| 亚洲第一色在线| 日韩欧美在线网址| 亚洲电影免费观看高清完整版在线观看| 亚洲91精品在线| www.久久色.com| 日韩电视剧免费观看网站| 91精品视频一区| 午夜精品一区二区三区av| 国产91av在线| 亚洲免费人成在线视频观看| 欧洲亚洲妇女av| 国产日韩精品在线播放| 亚洲伊人久久大香线蕉av| 国产日韩在线亚洲字幕中文| 777精品视频| 国产精品视频xxxx| 国产自产女人91一区在线观看| 欧美成人精品不卡视频在线观看| 欧美在线激情网| 欧美理论在线观看| 亚洲精品天天看| 亚洲国产高清福利视频| 97超碰色婷婷| 亚洲精品视频网上网址在线观看| 久久人人爽人人爽人人片av高请| 欧美视频在线观看免费| 国产精品视频免费在线| 国产精品ⅴa在线观看h| 亚洲欧美一区二区精品久久久| 国产亚洲成av人片在线观看桃| 日韩视频一区在线| 成人欧美一区二区三区在线| 最新日韩中文字幕| 久久久久国色av免费观看性色| 色妞欧美日韩在线| 国产成人中文字幕| 久久久人成影片一区二区三区观看| 日韩精品日韩在线观看| 91成人在线观看国产| 欧美黑人性猛交| 欧美肥老妇视频| 国模视频一区二区三区| 综合国产在线视频| 欧美性xxxx极品hd欧美风情| 国产成+人+综合+亚洲欧美丁香花| 狠狠久久亚洲欧美专区| 国产成人精品免费视频| 欧美成在线视频| 欧美裸体xxxxx| 精品视频久久久久久| 亚洲人成电影网站色…| 精品亚洲国产成av人片传媒| 久久久久日韩精品久久久男男| 一区二区三区四区视频| 日韩成人av在线| 尤物九九久久国产精品的特点| 国产日本欧美一区二区三区在线| 国产精品久久久久不卡| 亚洲一区二区在线播放| 成人444kkkk在线观看| 青青草成人在线| 国产精品久久久久77777| www.亚洲男人天堂| 日韩中文字幕网| 国产精品国模在线| 91九色蝌蚪国产| 亚洲美女av黄| 97av视频在线| 成人精品久久av网站| 日韩女优在线播放| 欧美日韩亚洲激情| 中文字幕亚洲综合久久| 色综合伊人色综合网站| 亚洲精品v天堂中文字幕| 中文日韩电影网站| 久久精品成人一区二区三区| 欧美在线国产精品| 精品国产欧美一区二区五十路| 91视频国产高清| 欧美最近摘花xxxx摘花| 日韩天堂在线视频| 性色av一区二区三区免费| 国产精品自产拍高潮在线观看| 国产精品久久久久久久久久小说| 国产一区二区香蕉| 国产女同一区二区| 亚洲自拍偷拍一区| 最近日韩中文字幕中文| 国产精品免费久久久久影院| 中文字幕日韩电影| 国产精品福利在线观看| 国产成人精品免高潮费视频| 成人精品一区二区三区| 日韩精品免费一线在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩另类在线| 国产aⅴ夜夜欢一区二区三区| 亚洲成人av片在线观看| 精品呦交小u女在线| www.日韩欧美| 国产精品高潮呻吟久久av野狼| 久久99热精品| 久久久在线视频| 最近2019年日本中文免费字幕| 亚洲成人精品视频| 久久精品一本久久99精品| 成人午夜高潮视频| 欧美一区二区.| 在线成人激情黄色| 欧美日韩免费区域视频在线观看| 欧美日韩免费一区| 日韩av电影在线播放| 97热在线精品视频在线观看| 色777狠狠综合秋免鲁丝| 亚洲国产日韩欧美在线99| 欧洲日本亚洲国产区| 欧美极品欧美精品欧美视频| 欧美日韩免费区域视频在线观看| 午夜精品一区二区三区在线视频| 中文字幕视频在线免费欧美日韩综合在线看| 国内伊人久久久久久网站视频| 国产精品亚洲美女av网站| 欧美日韩高清在线观看| 欧美精品激情blacked18| 亚洲免费视频一区二区| 最近2019年手机中文字幕| 俺也去精品视频在线观看| 国产精品福利网站| 色综合91久久精品中文字幕| 亚洲天堂av在线播放| 91精品成人久久| 精品色蜜蜜精品视频在线观看| 国产97人人超碰caoprom| 亚洲一级免费视频| 中文综合在线观看| 清纯唯美亚洲激情| 亚洲精品97久久| 97在线精品国自产拍中文| 自拍偷拍免费精品| 中文字幕少妇一区二区三区| 91在线视频成人| 九九热精品视频国产| 少妇久久久久久| 青青青国产精品一区二区| 91精品国产综合久久香蕉最新版| 国产精品av免费在线观看|