国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]

來源:懂視網 責編:小采 時間:2020-11-09 15:19:07
文檔

SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]

SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]:--查詢分組號為6的子孫子節點 with RTD1 as(select id ,pid from UserGroup),RTD2 as(select * from RTD1 where id=6union allselect RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID)select *
推薦度:
導讀SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]:--查詢分組號為6的子孫子節點 with RTD1 as(select id ,pid from UserGroup),RTD2 as(select * from RTD1 where id=6union allselect RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID)select *

--查詢分組號為6的子孫子節點 with RTD1 as(select id ,pid from UserGroup),RTD2 as(select * from RTD1 where id=6union allselect RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID)select * from RTD2 --現在想進一步將查詢結果轉換為逗號分隔的字

--查詢分組號為6的子孫子節點

with 
	RTD1 as(
	select id ,pid from UserGroup
	),
	RTD2 as(
	select * from RTD1 where id=6
	union all
	select RTD1.* from RTD2 inner join RTD1 
	on RTD2.id=RTD1.PID
	)
select * from RTD2


--現在想進一步將查詢結果轉換為逗號分隔的字串

--查詢分組號為6的子孫子節點

with 
	RTD1 as(
	select id ,pid from UserGroup
	),
	RTD2 as(
	select * from RTD1 where id=6
	union all
	select RTD1.* from RTD2 inner join RTD1 
	on RTD2.id=RTD1.PID
	)
--select * from RTD2
select ','+cast(id as nvarchar) from RTD2 for xml path('')


查詢結果如下:

,6,17,18,20,21,22,23,24,29,25,26,28,27

(13 行受影響)

--現在想進一步去掉左邊逗號,同時加上左右圓括號

--查詢分組號為6的子孫子節點

with 
	RTD1 as(
	select id ,pid from UserGroup
	),
	RTD2 as(
	select * from RTD1 where id=6
	union all
	select RTD1.* from RTD2 inner join RTD1 
	on RTD2.id=RTD1.PID
	)
select '('+
	STUFF(
	(select ','+cast(id as nvarchar) from RTD2 for xml path('')),1,1,''
	)+
')'


查詢結果如下:

(6,17,18,20,21,22,23,24,29,25,26,28,27)

(1 行受影響)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

關于以上文章中關于for xml path的用法,我貼出一位朋友的博客如下[對這位朋友表示感謝]:

FOR XML PATH 有的人可能知道有的人可能不知道,其實它就是將查詢結果集以XML形式展現,有了它我們可以簡化我們的查詢語句實現一些以前可能需要借助函數活存儲過程來完成的工作。那么以一個實例為主.

一.FOR XML PATH 簡單介紹

那么還是首先來介紹一下FOR XML PATH ,假設現在有一張興趣愛好表(hobby)用來存放興趣愛好,表結構如下:

接下來我們來看應用FOR XML PATH的查詢結果語句如下:

SELECT * FROM @hobby FOR XML PATH

結果:


1
爬山


2
游泳


3
美食

由此可見FOR XML PATH 可以將查詢結果根據行輸出成XML各式!

那么,如何改變XML行節點的名稱呢?代碼如下:

SELECT * FROM @hobby FOR XML PATH('MyHobby')

結果一定也可想而知了吧?沒錯原來的行節點 變成了我們在PATH后面括號()中,自定義的名稱,結果如下:


1
爬山


2
游泳


3
美食

這個時候細心的朋友一定又會問那么列節點如何改變呢?還記的給列起別名的關鍵字AS嗎?對了就是用它!代碼如下:

SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby')

那么這個時候我們列的節點名稱也會編程我們自定義的名稱 結果如下:


1
爬山


2
游泳


3
美食

噢! 既然行的節點與列的節點我們都可以自定義,我們是否可以構建我們喜歡的輸出方式呢?還是看代碼:

SELECT '[ '+hName+' ]' FROM @hobby FOR XML PATH('')

沒錯我們還可以通過符號+號,來對字符串類型字段的輸出格式進行定義。結果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

那么其他類型的列怎么自定義? 沒關系,我們將它們轉換成字符串類型就行啦!例如:

SELECT '{'+STR(hobbyID)+'}','[ '+hName+' ]' FROM @hobby FOR XML PATH('')

好的 FOR XML PATH就基本介紹到這里吧,更多關于FOR XML的知識請查閱幫助文檔!

接下來我們來看一個FOR XML PATH的應用場景吧!那么開始吧。。。

二.一個應用場景與FOR XML PATH應用

首先呢!我們在增加一張學生表,列分別為(stuID,sName,hobby),stuID代表學生編號,sName代表學生姓名,hobby列存學生的愛好!那么現在表結構如下:

這時,我們的要求是查詢學生表,顯示所有學生的愛好的結果集,代碼如下:

SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
SELECT sName,
(SELECT hobby+',' FROM student
WHERE sName=A.sName
FOR XML PATH('')) AS StuList
FROM student A
GROUP BY sName
) B

結果如下:

分析: 好的,那么我們來分析一下,首先看這句:

SELECT hobby+',' FROM student
WHERE sName=A.sName
FOR XML PATH('')

這句是通過FOR XML PATH 將某一姓名如張三的愛好,顯示成格式為:“ 愛好1,愛好2,愛好3,”的格式!

那么接著看:

SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
SELECT sName,
(SELECT hobby+',' FROM student
WHERE sName=A.sName
FOR XML PATH('')) AS StuList
FROM student A
GROUP BY sName
) B

剩下的代碼首先是將表分組,在執行FOR XML PATH 格式化,這時當還沒有執行最外層的SELECT時查詢出的結構為:

可以看到StuList列里面的數據都會多出一個逗號,這時隨外層的語句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby 就是來去掉逗號,并賦予有意義的列明!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

關于stuff函數的用法:

刪除指定長度的字符串并在指定的起始點插入另一組字符
STUFF ( character_expression , start , length , character_expression )
character_expression :操作的字符,
start:刪除和插入的起始點,
length:刪除的長度,
character_expression :要插入的字符

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]

SQLSERVER2005將查詢結果轉換為字串[接上一篇文章]:--查詢分組號為6的子孫子節點 with RTD1 as(select id ,pid from UserGroup),RTD2 as(select * from RTD1 where id=6union allselect RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID)select *
推薦度:
標簽: 轉換 查詢 文章
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日本成人一区 | 成人一a毛片免费视频 | 国产成人高清一区二区私人 | 亚洲视频免费观看 | 亚洲国产精品综合久久一线 | 一区二区三区欧美视频 | 国产日韩视频一区 | 91精品91久久久久久 | 亚洲欧美精选 | 色综合色狠狠天天综合色 | 国产欧美日韩一区二区三区 | 精品国产一区二区三区久久影院 | 免费观看国产 | 在线播放国产一区 | 国内精品久久久久久久aa护士 | 国产69精品久久久久999 | 亚洲欧美精品在线 | 五月婷婷网站 | 国产一二三区在线观看 | 久久久久成人精品一区二区 | 亚洲香蕉| 日韩精品在线一区二区 | 最新国产在线播放 | 国产欧美综合在线一区二区三区 | 国产一级久久久久久毛片 | 一区二区三区在线免费 | 青草青草伊人精品视频 | 久国产| 免费视频一区二区 | 欧美日韩免费一区二区在线观看 | 麻豆一区二区 | 欧美日韩精品在线观看 | 久久综合爱 | 精品国产高清a毛片无毒不卡 | 欧美日韩一区二区三区久久 | 亚洲视频在线免费看 | 国产成人一区二区三区 | 99精品欧美一区二区三区综合在线 | 欧美日韩视频在线播放 | 亚洲欧美天堂 | 伊人精品国产 |