22,209
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE [dbo].[Sheet5] (
[ID] nvarchar(255) NULL ,
[项目名称] nvarchar(255) NULL ,
[负责人] nvarchar(255) NULL ,
[参与人员] nvarchar(255) NULL
)
GO
-- ----------------------------
-- Records of Sheet5
-- ----------------------------
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'张三,丽,英,胜,亮,朱(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'2', N'BBB', N'B', N'霞,平,陈(学),李(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'3', N'CCCC', N'C', N'赵,圣(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'4', N'DDDD', N'D', N'')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'5', N'EEEE', N'E', N'')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'希望得到如下结果', N'', N'', N'')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'ID', N'项目名称', N'负责人', N'参与人员')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'张三')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'丽')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'英')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'胜')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'亮')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'1', N'AAAA', N'A', N'朱(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'2', N'BBB', N'B', N'霞')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'2', N'BBB', N'B', N'平')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'2', N'BBB', N'B', N'陈(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'2', N'BBB', N'B', N'李(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'3', N'CCCC', N'C', N'赵')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'3', N'CCCC', N'C', N'圣(学)')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'4', N'DDDD', N'D', N'')
GO
GO
INSERT INTO [dbo].[Sheet5] ([ID], [项目名称], [负责人], [参与人员]) VALUES (N'5', N'EEEE', N'E', N'')
GO
GO
SELECT s.ID,s.项目名称,s.负责人,d.n FROM sheet5 AS s
CROSS APPLY(VALUES(CONVERT(XML,'<n>'+REPLACE(s.参与人员,',','</n><n>')+'</n>'))) c(x)
CROSS APPLY(SELECT s.b.value('.','nvarchar(10)') FROM c.x.nodes('n')s(b)) d(n)
ID 项目名称 负责人 n
1 AAAA A 张三
1 AAAA A 丽
1 AAAA A 英
1 AAAA A 胜
1 AAAA A 亮
1 AAAA A 朱(学)
2 BBB B 霞
2 BBB B 平
2 BBB B 陈(学)
2 BBB B 李(学)
3 CCCC C 赵
3 CCCC C 圣(学)
;WITH a AS (
SELECT id,
参与人员,
1 iStart,
CHARINDEX(',',参与人员) iEnd
FROM sheet5
UNION ALL
SELECT id,
参与人员,
iEnd+1,
CHARINDEX(',',参与人员,iEnd+1)
FROM a
WHERE iEnd <> 0
),
b AS (
SELECT id,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY iStart) rn,
SUBSTRING(参与人员,
iStart,
CASE WHEN iEnd=0 THEN
Len(参与人员)+1-iStart
ELSE
iEnd-iStart
END) 参与人员
FROM a
)
SELECT s.id,
s.项目名称,
s.负责人,
b.参与人员
FROM sheet5 s
JOIN b
ON s.id = b.id
ORDER BY s.id, b.rn
id 项目名称 负责人 参与人员
----------- -------- -------- --------------------
1 AAAA A 张三
1 AAAA A 丽
1 AAAA A 英
1 AAAA A 胜
1 AAAA A 亮
1 AAAA A 朱(学)
2 BBB B 霞
2 BBB B 平
2 BBB B 陈(学)
2 BBB B 李(学)
3 CCCC C 赵
3 CCCC C 圣(学)
4 DDDD D
5 EEEE E
ALTER FUNCTION dbo.f_splitstr(@SourceSql NVARCHAR(MAX),@StrSeprate VARCHAR(100))
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @ch AS VARCHAR(100)
SET @SourceSql=@SourceSql+@StrSeprate
WHILE(@SourceSql<>'')
BEGIN
SET @ch=LEFT(@SourceSql,CHARINDEX(@StrSeprate,@SourceSql,1)-1)
INSERT @temp VALUES(@ch)
SET @SourceSql=STUFF(@SourceSql,1,CHARINDEX(@StrSeprate,@SourceSql,1),'')
END
RETURN
END
GO
SELECT a.ID ,
a.项目名称 ,
a.负责人,
t.f1 AS 参与人员
FROM sheet5 a
CROSS APPLY ( SELECT f1
FROM dbo.f_splitstr(( SELECT 参与人员
FROM dbo.Sheet5 b
WHERE a.ID = b.ID
), ',')
) t