欧美三区四区_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數據庫教程
国产女同在线观看| 青青在线视频免费观看| 免费人成又黄又爽又色| 国产精品第一| 国产精品99久久久久久宅男| 亚洲第一级黄色片| 视频一区视频二区视频| 欧美一区二区三区爽爽爽| 国产精品极品国产中出| 久久久国产精品麻豆| 久久亚洲欧美日韩精品专区 | www.久久色.com| 日本大胆人体视频| 一级片在线观看免费| 88国产精品视频一区二区三区| 亚洲一卡二卡三卡四卡| 国产精品国产亚洲伊人久久| 亚洲欧美自拍另类日韩| 高h调教冰块play男男双性文| 三级成人在线视频| 精品国产一区二区三区久久影院 | 99一区二区三区| 粉嫩av蜜桃av蜜臀av| 国产亚洲字幕| 久久精品一区四区| 欧美黑人一区二区三区| 在线免费视频一区| 成人香蕉视频| 国产福利电影一区二区三区| 一区二区三区在线播放欧美| 欧美一级免费播放| 国产精品国产三级国产aⅴ| 亚洲欧美日韩国产综合精品二区 | 999精品视频在线观看| 97久久超碰国产精品| 久久偷看各类女兵18女厕嘘嘘| 免费在线观看毛片网站| 韩国av免费在线| 国产电影一区二区三区| 色妞在线综合亚洲欧美| 成熟老妇女视频| 少妇人妻偷人精品一区二区| 丁香网亚洲国际| 蜜臀久久99精品久久久无需会员 | 亚洲综合中文字幕68页| 欧美激情久久久久久久| 同性恋视频一区| 亚洲国产精品久久人人爱| 国产区亚洲区欧美区| 精品成人无码一区二区三区| 影视先锋久久| 精品久久久久久国产| 国产精品加勒比| 免费视频一二三区| 亚洲91久久| 欧美精品123区| 一本—道久久a久久精品蜜桃| 欧美性猛交xxxx乱大交hd | 亚洲欧美国产视频| 久久久亚洲精品无码| 亚洲免费成人在线| 成人免费视频caoporn| 久久久久久久久久久免费精品| 国产精品19p| av综合网页| 亚洲国产一区二区a毛片| 96精品久久久久中文字幕| 久久久久久久麻豆| 欧美91福利在线观看| 欧美mv日韩mv亚洲| 日韩小视频网站| 天堂网在线播放| 91玉足脚交白嫩脚丫在线播放| 91国语精品自产拍在线观看性色| 国产精品无码在线| 亚洲人成精品久久久| 色婷婷国产精品久久包臀| 美日韩免费视频| 成人a v视频| 麻豆一区二区在线| 欧美裸体男粗大视频在线观看| 美女日批在线观看| 群体交乱之放荡娇妻一区二区| 欧美色另类天堂2015| 欧美在线视频一区二区三区| 在线视频 中文字幕| 国产精品 欧美精品| 性欧美xxxx视频在线观看| 免费污网站在线观看| 91九色精品国产一区二区| 欧美一区二区三区的| 人体内射精一区二区三区| 四虎4545www国产精品| 亚洲日本在线视频观看| 不卡一区二区三区视频| 国产精品视频一区在线观看| 激情文学综合丁香| 午夜精品美女自拍福到在线| 在线不卡av电影| 中国成人一区| 日韩精品丝袜在线| www.久久av.com| 久久成人福利| 欧美日韩黄色影视| 欧美这里只有精品| 欧美韩国亚洲| 亚洲一区二区三区自拍| 日本三级中国三级99人妇网站| 国产麻豆免费视频| 91久色porny| 99re视频在线播放| 精品视频一二三区| 成人h动漫精品| 国产欧亚日韩视频| av图片在线观看| 国产精品456露脸| 国产精品福利片| 日本少妇在线观看| 激情久久五月天| 国产激情综合五月久久| 黄色激情视频在线观看| 激情综合色播五月| 国产精品jvid在线观看蜜臀| 久久久国产精华液| 精品一区二区三区久久久| 欧洲一区二区视频| 日本在线视频免费观看| 国产精品1区2区3区在线观看| 国产精品日韩在线一区| 五月婷婷亚洲综合| 成人动漫一区二区| 91网站在线免费观看| 波多野结衣电车| 成人国产精品视频| 亚洲综合大片69999| 亚洲一区二区视频在线播放| 久久久综合网站| 精品国产综合久久| 亚洲乱色熟女一区二区三区| 亚洲欧美经典视频| 天天操天天干天天玩| 日韩高清在线| 91九色最新地址| 日本黄网站免费| 综合综合综合综合综合网| 亚洲国产精品人久久电影| 国产精品嫩草69影院| 永久91嫩草亚洲精品人人| 日韩视频欧美视频| а天堂中文在线资源| 麻豆国产欧美一区二区三区| 国产精品1区2区在线观看| 久久久久亚洲av成人毛片韩| 91首页免费视频| 久久久久国产精品视频| 天堂v在线观看| 欧美日韩国产色视频| 可以在线看的av网站| 好吊妞国产欧美日韩免费观看网站| 日韩片之四级片| 亚洲丝袜在线观看| 欧美日韩hd| 久久久女女女女999久久| 久一区二区三区| 成人av在线播放网址| 韩国成人av| 国模套图日韩精品一区二区| 色诱视频网站一区| 国产wwwxx| 亚洲人体av| 久久久久久久久电影| 国产成人无码一区二区三区在线 | 91精品成人久久| 日本天堂网在线| 国产精品视频观看| 黄色网zhan| 欧美91在线| 亚洲日韩欧美视频一区| 麻豆一区在线观看| 粉嫩高潮美女一区二区三区 | av一区二区三区免费观看| 哺乳挤奶一区二区三区免费看| 亚洲国产欧美自拍| 91麻豆制片厂| 大陆成人av片| 日本成人黄色| 亚洲天堂av资源在线观看| 亚洲精品福利免费在线观看| 青娱乐国产视频| 国产乱国产乱300精品| 国产精品一 二 三| 日韩电影精品| 精品乱人伦小说| 人人人妻人人澡人人爽欧美一区| 国产一区二区久久| 欧美一区二区影视| 一区二区日韩| 正在播放亚洲1区| 麻豆亚洲av熟女国产一区二| 久久精品夜夜夜夜久久| 国产高清不卡无码视频| 久久99视频| 欧美精品中文字幕一区| 亚洲黄网在线观看| 一区二区三区欧美激情| 日本一极黄色片| 影音先锋久久久| 国产精品无码专区在线观看| 日本免费一区视频| 欧美久久久久久久久久| 性色av蜜臀av色欲av| 国产一区二区在线观看免费| 欧美日韩综合久久| av一级亚洲| 久久精品国产亚洲精品2020| 午夜影院免费在线观看| 亚洲主播在线观看| 福利片一区二区三区| 久久久久一区| 国产精品免费一区二区| 国产精品久久久久久久久久辛辛| 亚洲女人初尝黑人巨大| 欧美日韩国产精品综合| 亚洲四区在线观看| 亚洲第一中文av| 天堂资源在线中文精品| 国产日韩欧美一区二区| 最新国产精品精品视频| 视频一区视频二区国产精品| 欧美h在线观看| 天天色综合成人网| 丰满人妻一区二区三区免费视频棣| 狠狠狠色丁香婷婷综合激情| 日韩免费av电影| 精品在线91| 欧美一级在线播放| 性xxxxbbbb| 亚洲国模精品私拍| 国产一级免费观看| 亚洲一区二区在线播放相泽| 伊人影院在线观看视频| 国产成人精品亚洲777人妖| 亚洲欧洲一区二区福利| 成人短片线上看| 国产精品亚洲片夜色在线| 日韩精品影片| 一区二区三区高清国产| 99精品人妻国产毛片| 欧美性极品xxxx娇小| 大乳护士喂奶hd| 成人动漫一区二区三区| 性欧美大战久久久久久久| 日韩视频中文| 蜜桃狠狠色伊人亚洲综合网站| 女同一区二区三区| 欧美一级电影久久| 桃花岛tv亚洲品质| 亚洲天堂av高清| 性高潮视频在线观看| 欧美色老头old∨ideo| 天堂在线中文视频| 中文字幕在线不卡一区| 日韩不卡的av| 成人精品视频一区| 国产又黄又大又粗视频| 日日摸夜夜添夜夜添亚洲女人| 日韩动漫在线观看| 欧美3p视频| 岛国视频一区免费观看| 欧美久久精品| 国产精品欧美一区二区| 麻豆一二三区精品蜜桃| 久久噜噜噜精品国产亚洲综合| 五月婷婷六月色| 在线中文字幕日韩| av在线资源观看| 亚洲国产天堂久久综合| 国产视频1区2区| 3atv一区二区三区| 日本熟妇毛耸耸xxxxxx| 一本到一区二区三区| 刘亦菲国产毛片bd| 亚洲一区中文日韩| 日本黄色网址大全| 日韩一区在线免费观看| 老司机午夜免费福利| 国产欧美日韩在线看| 人妻换人妻仑乱| 久久精品一区二区三区av| 一级黄色片在线免费观看| 99精品国产视频| 亚洲一区日韩精品| 99久久国产综合精品女不卡| www.se五月| 99久久99久久综合| 九九九九九九九九| 久久这里只有精品首页| 一区二区三区国产好的精华液| 久久影院视频免费| 又黄又爽又色的视频| 国产偷v国产偷v亚洲高清| 欧美一区二区三区影院| 国产欧美日韩卡一| 亚洲啪av永久无码精品放毛片| 国产精品丝袜久久久久久app| 精品人妻在线视频| 中文字幕一区在线观看视频| 欧美成人三级伦在线观看| 亚洲日本一区二区| 尤物视频最新网址| 亚洲www啪成人一区二区麻豆| 国产第一页精品| 福利视频一区二区| 妺妺窝人体色www在线下载| 欧美午夜精品电影| 国产精品777777| 亚洲国产精品成人va在线观看| 91成人在线免费| 中文字幕精品一区久久久久| 亚洲一区资源| 欧美精品福利在线| 欧美日韩黄色| 91美女高潮出水| 日韩在线看片| 日韩av在线电影观看| 国产美女一区| av女优在线播放| 成人综合在线观看| 交换做爰国语对白| 亚洲欧美自拍偷拍| jizzjizzjizz国产| 在线观看日韩毛片| 久久久久久亚洲av无码专区| 亚洲美女视频网| 国产精欧美一区二区三区蓝颜男同| 97久久精品人搡人人玩| 国语一区二区三区| 国产亚洲精品久久飘花| 韩国精品一区二区三区| 国产免费内射又粗又爽密桃视频| 国产一区欧美一区| 色91精品久久久久久久久| 中文字幕不卡在线观看| 亚洲一区二区三区日韩| 欧美午夜一区二区三区免费大片| 自拍偷拍18p| 中文字幕不卡在线视频极品| 成人涩涩视频| 国产美女久久久| 91精品一区二区三区综合| 中文字幕在线乱| 国产成人激情av| 中文字幕天堂av| 福利视频导航一区| 国产免费a视频| 日韩视频亚洲视频| 美女精品久久| 国产精品手机在线| 久久精品人人| 日韩av片网站| 亚洲免费av高清| 国产亚洲小视频| 日韩电影网在线| 欧美影视资讯| 国产日韩欧美日韩大片| 在线一区电影| 人妻久久久一区二区三区| 91麻豆免费观看| 在线免费观看视频| 欧美精品国产精品| 亚洲av色香蕉一区二区三区| 性亚洲最疯狂xxxx高清| 久久不见久久见中文字幕免费| 色999日韩自偷自拍美女| 黄色日韩网站视频| 精品伦一区二区三区| 日韩欧美在线看| 91久久精品无码一区二区| 欧美国产日产韩国视频| 日韩av三区| 亚洲电影一二三区| 成人性生交大片免费| 97超碰在线资源| 日韩欧美一区在线观看| 五月婷婷六月丁香| 成人福利在线观看| 国产一区二区三区的电影 | 91丨porny丨探花| 欧美国产精品劲爆| 久久久国产精品黄毛片| 亚洲网站在线看| 57pao国产一区二区| 欧美日韩精品免费观看视一区二区| 麻豆视频一区二区| 毛茸茸free性熟hd| 欧美精品日韩精品| 天天干,夜夜爽| 亚洲aaa激情| 玖玖国产精品视频| 亚洲区 欧美区|