首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

各位大佬,小弟我又来了

2013-08-09 
各位大佬,我又来了。CREATE TABLE [dbo].[系统数据_员工信息]([员工代码] [int] IDENTITY(1,1) NOT NULL,[

各位大佬,我又来了。


CREATE TABLE [dbo].[系统数据_员工信息](
[员工代码] [int] IDENTITY(1,1) NOT NULL,
[姓名] [nchar](4) NULL,
[机构代码] [int] NULL,

CREATE TABLE [dbo].[工作管理_工作列表](
[工作序号] [int] IDENTITY(1,1) NOT NULL,
[发布人] [nvarchar](4) NULL,
[发布日期] [datetime] NULL,
[状态] [nvarchar](3) NULL,

CREATE TABLE [dbo].[工作管理_工作分工](
[序号] [int] IDENTITY(1,1) NOT NULL,
[工作序号] [int] NULL,
[员工代码] [int] NULL,
[性质] [nvarchar](2) NULL,

以上是表结构
想得到以下结果:
工作序号 主管 分管  主办   协办
 001      张x  李x   黄x   王x、刘x

也就是协办可能会有两个以上的人,怎么合并他们?



[解决办法]
用FOR XML PATH,如下请参考:
/*TB1
dah    fid
A       10
A       11
A       12
B       20 
B       21
B       22 
C       30
C       31
要出来的效果是
dah    fid
A       10,11,12
B       20,21,22
C       30,31
*/
WITH CTE AS (SELECT
'A' dah,10 fid UNION SELECT
'A',11 UNION SELECT
'A',12 UNION SELECT
'B',20 UNION SELECT
'B',21 UNION SELECT
'B',22 UNION SELECT
'C',30 UNION SELECT
'C',31
)
SELECT dah,fid=STUFF((SELECT ','+CAST(fid AS VARCHAR(10)) FROM CTE WHERE dah=t.dah FOR XML PATH('')),1,1,'')
FROM CTE t
GROUP BY t.dah

热点排行