欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

一列保存多個ID(將多個用逗號隔開的ID轉換成用逗號隔開的名稱)_Mssql數據庫教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:經典SQL語句大全
一、基礎 1、說明:創建數據庫 CREATE DATABASE database - name 2、說明:刪除數據庫 drop database dbname 3、說明:備份sql server -- - 創建 備份數據的 device USE master EXEC sp_addumpdevice ' disk ' , ' testBack ' , ' c:\mssql7backup\MyNwind_1.dat ' --

背景:在做項目時,經常會遇到這樣的表結構在主表的中有一列保存的是用逗號隔開ID。如,當一個員工從屬多個部門時、當一個項目從屬多個城市時、當一個設備從屬多個項目時,很多人都會在員工表中加入一個deptIds VARCHAR(1000)列(本文以員工從屬多個部門為例),用以保存部門編號列表(很明顯這不符合第一范式,但很多人這樣設計了,在這篇文章中我們暫不討論在這種應用場景下,如此設計的對與錯,有興趣的可以在回復中聊聊),然后我們在查詢列表中需要看到這個員工從屬哪些部門。

初始化數據:

部門表、員工表數據:

  1. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]')) 
  2. DROP TABLE [dbo].Department 
  3. GO 
  4. --部門表 
  5. CREATE TABLE Department 
  6.     id int
  7.     name nvarchar(50) 
  8. INSERT INTO Department(id,name
  9. SELECT 1,'人事部' 
  10. UNION  
  11. SELECT 2,'工程部' 
  12. UNION  
  13. SELECT 3,'管理部' 
  14.  
  15. SELECT * FROM Department 
  16.  
  17.  
  18. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]')) 
  19. DROP TABLE [dbo].Employee 
  20. GO 
  21. --員工表 
  22. CREATE TABLE Employee 
  23.     id int,  
  24.     name nvarchar(20), 
  25.     deptIds varchar(1000) 
  26. INSERT INTO Employee(id,name,deptIds) 
  27. SELECT 1,'蔣大華','1,2,3' 
  28. UNION 
  29. SELECT 2,'小明','1' 
  30. UNION  
  31. SELECT 3,'小華','' 
  32.  
  33. SELECT * FROM Employee 

希望得到的結果:

解決方法:

第一步,是得到如下的數據。即將員工表集合與相關的部門集合做交叉連接,其中使用了fun_SplitIds函數(作用是將ids分割成id列表),然后員工集合與這個得到的集合做交叉連接

SELECT E.*,ISNULL(D.name,'') AS deptName FROM Employee AS E     OUTER APPLY dbo.fun_SplitIds(E.deptIds) AS DID    LEFT JOIN Department AS D ON DID.ID=D.id;

 

第二步,已經得到了如上的數據,然后要做的就是根據ID分組,并對deptName列做聚合操作,但可惜的是SQL SERVER還沒有提供對字符串做聚合的操作。但想到,我們處理樹形結構數據時,用CTE來做關系數據,做成有樹形格式的數據,如此我們也可以將這個問題轉換成做樹形格式的問題,代碼如下:

  1. WITH EmployeT AS
  2. --員工的基本信息(使用OUTER APPLY將多個ID拆分開來,然后與部門表相關聯) 
  3. --此時已將員工表所存的IDS分別與部門相關聯,下面需要將此集合中的deptName聚合成一個記錄 
  4. SELECT E.*,ISNULL(D.name,''AS deptName 
  5. FROM Employee AS E  
  6.    OUTER APPLY dbo.fun_SplitIds(E.deptIds) AS DID 
  7.    LEFT JOIN Department AS D ON DID.ID=D.id 
  8. ),mike AS
  9.    SELECT id,name,deptIds,deptName 
  10.       ,ROW_NUMBER()OVER(PARTITION BY id ORDER BY id) AS level_num 
  11.    FROM EmployeT 
  12. ),mike2 AS
  13.    SELECT id,name,deptIds,CAST(deptName AS NVARCHAR(100)) AS deptName,level_num  
  14.    FROM mike 
  15.    WHERE level_num=1 
  16.    UNION ALL 
  17.    SELECT m.id,m.name,m.deptIds,CAST(m2.deptName+','+m.deptName AS NVARCHAR(100)) AS deptName,m.level_num  
  18.    FROM mike AS m 
  19.       INNER JOIN mike2 AS m2 ON m.ID=m2.id AND m.level_num=m2.level_num+1 
  20. ),maxMikeByIDT AS
  21.        SELECT id,MAX(level_num) AS level_num 
  22.        FROM mike2  
  23.        GROUP BY ID 
  24.  
  25. SELECT A.id,A.name,A.deptIds,A.deptName 
  26. FROM mike2 AS A  
  27.    INNER JOIN maxMikeByIDT AS B ON A.id=B.ID AND A.level_num=B.level_num 
  28. ORDER BY A.id OPTION (MAXRECURSION 0) 
結果如下:

全部SQL:

  1. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]')) 
  2. DROP TABLE [dbo].Department 
  3. GO 
  4. --部門表 
  5. CREATE TABLE Department 
  6.     id int
  7.     name nvarchar(50) 
  8. INSERT INTO Department(id,name
  9. SELECT 1,'人事部' 
  10. UNION  
  11. SELECT 2,'工程部' 
  12. UNION  
  13. SELECT 3,'管理部' 
  14.  
  15. SELECT * FROM Department 
  16.  
  17.  
  18. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]')) 
  19. DROP TABLE [dbo].Employee 
  20. GO 
  21. --員工表 
  22. CREATE TABLE Employee 
  23.     id int,  
  24.     name nvarchar(20), 
  25.     deptIds varchar(1000) 
  26. INSERT INTO Employee(id,name,deptIds) 
  27. SELECT 1,'蔣大華','1,2,3' 
  28. UNION 
  29. SELECT 2,'小明','1' 
  30. UNION  
  31. SELECT 3,'小華','' 
  32.  
  33. SELECT * FROM Employee 
  34.  
  35. --創建一個表值函數,用來拆分用逗號分割的數字串,返回只有一列數字的表 
  36. IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fun_SplitIds]')) 
  37. DROP FUNCTION [dbo].fun_SplitIds 
  38. GO 
  39. CREATE FUNCTION dbo.fun_SplitIds( 
  40.     @Ids nvarchar(1000) 
  41. RETURNS @t_id TABLE (id VARCHAR(36)) 
  42. AS 
  43. BEGIN 
  44.     DECLARE @i INT,@j INT,@l INT,@v VARCHAR(36); 
  45.     SET @i = 0; 
  46.     SET @j = 0; 
  47.     SET @l = len(@Ids); 
  48.     while(@j < @l) 
  49.     begin 
  50.        SET @j = charindex(',',@Ids,@i+1); 
  51.        IF(@j = 0) set @j = @l+1; 
  52.        SET @v = cast(SUBSTRING(@Ids,@i+1,@j-@i-1) as VARCHAR(36)); 
  53.        INSERT INTO @t_id VALUES(@v) 
  54.        SET @i = @j; 
  55.     END 
  56.     RETURN
  57. END 
  58. GO 
  59.  
  60.  
  61. ;WITH EmployeT AS
  62. --員工的基本信息(使用OUTER APPLY將多個ID拆分開來,然后與部門表相關聯) 
  63. --此時已將員工表所存的IDS分別與部門相關聯,下面需要將此集合中的deptName聚合成一個記錄 
  64. SELECT E.*,ISNULL(D.name,''AS deptName 
  65. FROM Employee AS E  
  66.    OUTER APPLY dbo.fun_SplitIds(E.deptIds) AS DID 
  67.    LEFT JOIN Department AS D ON DID.ID=D.id 
  68. ),mike AS
  69.    SELECT id,name,deptIds,deptName 
  70.       ,ROW_NUMBER()OVER(PARTITION BY id ORDER BY id) AS level_num 
  71.    FROM EmployeT 
  72. ),mike2 AS
  73.    SELECT id,name,deptIds,CAST(deptName AS NVARCHAR(100)) AS deptName,level_num  
  74.    FROM mike 
  75.    WHERE level_num=1 
  76.    UNION ALL 
  77.    SELECT m.id,m.name,m.deptIds,CAST(m2.deptName+','+m.deptName AS NVARCHAR(100)) AS deptName,m.level_num  
  78.    FROM mike AS m 
  79.       INNER JOIN mike2 AS m2 ON m.ID=m2.id AND m.level_num=m2.level_num+1 
  80. ),maxMikeByIDT AS
  81.        SELECT id,MAX(level_num) AS level_num 
  82.        FROM mike2  
  83.        GROUP BY ID 
  84.  
  85.  
  86. SELECT A.id,A.name,A.deptIds,A.deptName 
  87. FROM mike2 AS A  
  88.    INNER JOIN maxMikeByIDT AS B ON A.id=B.ID AND A.level_num=B.level_num 
  89. ORDER BY A.id OPTION (MAXRECURSION 0) 

分享:SQL Server字符串切割
結果: 645002*01 --1 45854 --2 183677

來源:未知//所屬分類:Mssql數據庫教程/更新時間:2012-07-20
相關Mssql數據庫教程
国产波霸爆乳一区二区| 精品一区二区三区视频日产| 污版视频在线观看| ,一级淫片a看免费| 一精品久久久| 亚洲h精品动漫在线观看| 91精品国产高清久久久久久| 成人三级视频在线播放 | 亚洲成人动漫在线观看| 欧美在线激情视频| 色播五月激情五月| 风流少妇一区二区三区91| 男女精品网站| 欧美高清你懂得| 国产日产精品一区二区三区四区 | 国产嫩草影院久久久久| 久久视频中文字幕| 日韩av三级在线| 亚洲天堂自拍偷拍| 99国产精品视频免费观看一公开| 日本精品视频一区二区三区| 91网站在线看| 黑人巨大精品欧美| 日韩欧美中文在线观看| 久久久久国产精品厨房| 欧美大尺度激情区在线播放| 男人舔女人下面高潮视频| 国产女无套免费视频| 另类国产ts人妖高潮视频| 欧美二区在线观看| 日本电影一区二区三区| av资源吧首页| 国产精品麻豆久久| 色琪琪一区二区三区亚洲区| 99re在线观看视频| 久久久久久网址| 动漫一区二区在线| 日本乱子伦xxxx| 北条麻妃一区二区三区在线| 国产精品无人区| 欧美一区二粉嫩精品国产一线天| 日本55丰满熟妇厨房伦| 四虎精品一区二区免费| 久久久久久久久一| 97色在线观看| 91人人澡人人爽| 久久视频免费| 亚洲欧洲另类国产综合| 国产精品日韩欧美| 老牛影视av老牛影视av| 欧美日韩一本| 亚洲成a人片综合在线| 亚洲一区二区三区视频| 激情高潮到大叫狂喷水| 国产精品免费大片| 色国产精品一区在线观看| 精品国产乱码久久久久久88av | 亚洲承认在线| 欧美成人一区二区三区片免费| 亚洲免费在线精品一区| 最近国语视频在线观看免费播放| 久久精品九九| 亚洲美女福利视频网站| 欧美视频在线播放一区| 五月婷中文字幕| 成人av在线资源| 久久久久久久久久婷婷| 日本中文字幕有码| 成人免费在线电影网| 亚洲一级电影视频| 国产一区二区中文字幕免费看| 久久亚洲国产成人精品性色| 亚洲大片av| 日韩av在线高清| 亚洲一区二区三区四区中文字幕| 久久精品最新地址| 亚洲三级在线观看视频| 精品国产一区二| 一区二区三区中文字幕| 国产91视觉| 日韩av一二三区| 国产精品试看| 一本一道久久a久久精品逆3p| 九九视频精品在线观看| av日韩在线免费观看| 亚洲欧美日韩国产综合在线| 91国产在线播放| 国产精品7777777| 国产欧美一区二区色老头 | 亚洲日本在线播放| 中文字幕第一区二区| 国产欧美日韩中文字幕在线| 精品欧美一区二区久久久久| 99在线精品视频在线观看| 亚洲色图五月天| 亚洲网中文字幕| 激情小说一区| 91国产丝袜在线播放| 日本免费在线视频观看| 欧美性受xxxx狂喷水| 久久久精品日韩欧美| 欧美视频在线播放| 久久精品99国产精品酒店日本| 性色av浪潮av| 久久99国产精一区二区三区| 欧美日韩美少妇| 国产aaa免费视频| 91精品店在线| 亚洲妇女屁股眼交7| 五月天综合网| 欧美少妇bbw| 国产精品久久午夜| 国产三区精品| 中文字幕在线观看1| 成人av电影在线播放| 国产精品久久视频| 在线看成人av| 韩国欧美一区二区| 国产成人精品999| 久久亚洲成人av| 久久电影网站中文字幕| 欧美在线性爱视频| 青青草免费av| 青草av.久久免费一区| 国内精品久久久久久久久| 后入内射无码人妻一区| 鲁大师影院一区二区三区| 久热精品视频在线免费观看| 中文字幕第4页| 一区福利视频| 久久精品一区中文字幕| 国产综合精品在线| 亚久久调教视频| 欧美黄色片免费观看| 国产一二三av| 日韩av高清在线观看| 91产国在线观看动作片喷水| 日本老熟俱乐部h0930| 老司机精品视频导航| 国产成人亚洲综合| 国产美女激情视频| 99精品视频一区| 成人综合色站| 成人福利小视频| 亚洲欧美另类小说视频| 一本一道久久a久久综合精品 | 亚洲天堂久久久久| 国产精品日韩精品欧美精品| 欧美成人在线免费| 少妇高潮一区二区三区喷水| 日韩av一区二| 国产精品com| 香蕉污视频在线观看| 久久久久久久综合狠狠综合| 久久av一区二区三区亚洲| 色wwwwww| 婷婷久久综合九色综合绿巨人 | 99在线精品免费视频九九视| 欧美国产日韩在线| 久久激情免费视频| www.在线欧美| 久久香蕉综合色| 成人欧美大片| 欧洲精品一区二区| 欧美美女性视频| 亚洲成人免费| 欧美成人激情图片网| 久草福利资源在线| 国产在线精品一区二区| 91福利入口| 老司机午夜福利视频| 精品国产成人av| 天天摸天天碰天天添| 欧美三级伦理在线| www国产91| 91视频综合网| 成人白浆超碰人人人人| 国产一区二区三区奇米久涩| 五十路在线视频| 在线视频观看一区| 天天操精品视频| 最新成人av网站| 亚洲国产成人av| 色综合天天综合网国产成人网 | 国产主播一区二区| 99在线热播| 香蕉视频网站在线| 欧美系列亚洲系列| 欧美污在线观看| 一本久道综合久久精品| 国产精品久久久久久久久久 | av亚洲天堂网| 亚洲午夜极品| 国产精品福利片| а√中文在线资源库| 狠狠综合久久av一区二区小说| 熟女人妇 成熟妇女系列视频| 欧美电影免费观看高清| 欧美大片在线影院| 337p粉嫩色噜噜噜大肥臀| 1区2区3区国产精品| 精品无码一区二区三区在线| 精品理论电影在线| 欧美日本国产在线| 国产性生活视频| 一区二区在线观看不卡| www一区二区www免费| 99久久精品网站| 91精品国产高清久久久久久| 一本久道久久综合无码中文| 午夜国产精品一区| 毛片毛片毛片毛| 久久av一区| 国产福利久久精品| 自拍偷拍亚洲图片| 日韩精品久久久久久久玫瑰园 | 国产高清久久| 欧美在线精品免播放器视频| 精品久久无码中文字幕| 欧美日韩精品欧美日韩精品| 亚洲成人日韩在线| 高清不卡一区二区| 自拍另类欧美| 精品视频久久| 庆余年2免费日韩剧观看大牛| 天天躁日日躁狠狠躁av麻豆男男| 亚洲成a人片| 亚洲国产高清福利视频| 国产精品99久久久久久成人| 欧美国产日韩a欧美在线观看| 久久久亚洲精品无码| 黄色成人av网站| 亚洲综合在线播放| 日韩av黄色| 中文字幕日韩欧美精品在线观看| 四虎成人永久免费视频| 精品久久在线播放| 91porn在线| 国产成人在线网站| 超碰超碰超碰超碰超碰| 综合激情婷婷| 91香蕉亚洲精品| 国产精品一区免费在线 | 国产又粗又猛又黄又爽| 欧美吻胸吃奶大尺度电影| 中文字幕一区二区三区人妻电影| 91首页免费视频| 女人和拘做爰正片视频| 日韩视频在线一区二区三区 | 99热在线这里只有精品| 欧美国产91| 国产成人涩涩涩视频在线观看 | 国产精品亚洲四区在线观看| 亚洲美女性生活视频| 福利所第一导航| 中文字幕一区二| av免费一区二区| 免费的国产精品| 欧美福利精品| av一区二区在线观看| 欧美一级高清免费| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 精品国产免费一区二区三区四区 | 91福利国产成人精品照片| 一本色道久久综合亚洲精品图片| 成人h动漫精品| 免费观看亚洲视频| 欧美第一精品| 91原创国产| 日韩中文一区二区| 神马久久久久久| 国产欧美熟妇另类久久久| 欧美丰满少妇xxxbbb| 四虎地址8848| 亚洲一区影音先锋| 色哟哟无码精品一区二区三区| 国产精品一区2区| 国产精品久久国产| 最新国产拍偷乱拍精品| 激情久久av| 成人a'v在线播放| 国产精品视频xxxx| 国产69精品久久久久9999人| 欧美成人激情视频| 成人1区2区3区| 亚洲国产精品久久久久秋霞不卡| 黄网在线观看视频| 91福利区一区二区三区| 内射毛片内射国产夫妻| 亚洲人成网站色在线观看| 深夜做爰性大片蜜桃| 国产成都精品91一区二区三| 黄色动漫在线免费看| 美女视频一区免费观看| 日本一区视频在线观看| 欧美在线影院| 国产美女精品在线观看| 天堂俺去俺来也www久久婷婷| 国产精品视频yy9099| 一区二区三区四区精品视频| 午夜精品久久久久久久久久久久 | 亚洲国产中文字幕在线| 亚洲人高潮女人毛茸茸| 在线观看日批视频| 欧美欧美欧美欧美首页| 日本一级黄色录像| 欧美曰成人黄网| 国产成人在线网址| 精品国产91久久久| 久久乐国产精品| 久久精品视频9| 欧美中文字幕一区二区三区亚洲| 欧美日韩一级在线观看| 欧美性极品xxxx娇小| 天天爽天天爽天天爽| 色综合久久天天| 国产真实乱在线更新| 福利一区福利二区微拍刺激| 懂色av懂色av粉嫩av| 欧美午夜xxx| www.xxxx日本| 欧美性色黄大片| 欧美日韩大片在线观看| 精品久久久久久久久中文字幕| 在线观看亚洲网站| 欧美性猛交xxx| aaaaa一级片| 亚洲成a人片在线观看中文| 中文字幕在线1| 色综合久久综合网欧美综合网 | 亚洲同性同志一二三专区| 在线不卡av电影| 艳妇臀荡乳欲伦亚洲一区| 欧美丰满老妇熟乱xxxxyyy| 精品久久久久久中文字幕大豆网| 香蕉久久久久久久| 色域天天综合网| 国产69精品久久久久久久久久| 91精品国产麻豆国产自产在线 | 亚洲一区二区三区涩| 国产精品盗摄一区二区三区| 国产成人涩涩涩视频在线观看| 精品国模一区二区三区欧美| 国产精品成久久久久三级| 欧美天堂社区| 高清国产在线一区| 亚欧美无遮挡hd高清在线视频 | 波多野结衣喷潮| 欧美日韩一级二级| 免费观看成人毛片| 亚洲女人初尝黑人巨大| 日韩一级免费视频| 欧美激情亚洲综合一区| 国产精品一区二区中文字幕| 91久久精品国产| 欧美丝袜美腿| 欧美午夜精品理论片a级大开眼界| 欧美久久99| 麻豆一区二区三区| 欧美三级在线观看视频| 国产精品一区二区黑丝| 91精品人妻一区二区三区四区| 亚洲视频资源在线| youjizz.com国产| 欧美色欧美亚洲高清在线视频| 久久网免费视频| 国产视频精品免费播放| 亚欧洲精品视频| 69av成年福利视频| 欧美日韩一区二区三区视频播放| 欧美日韩国产免费一区二区三区| 99精品久久| 波多野结衣之无限发射| www.亚洲国产| 蜜桃av乱码一区二区三区| 欧美天堂亚洲电影院在线播放| 久久亚洲AV无码| 亚洲天堂av综合网| 成人在线视频观看| 18成人免费观看网站下载| 欧美精品一级| 国产欧美日韩小视频| www国产成人| 91成年人网站| 日韩一区二区三| 欧美特黄一级视频| 国产91av在线| 国产乱人伦丫前精品视频| 九九热久久66| 首页亚洲欧美制服丝腿| 麻豆三级在线观看| 亚洲三级在线免费| 欧美亚韩一区二区三区| 亚洲精品久久久久久下一站| 精品人妻一区二区三区浪潮在线| 色偷偷88888欧美精品久久久| 91精品国产自产观看在线| 99视频国产精品免费观看| 最新亚洲激情| 亚洲三级视频网站|