- SQL code
CCCIL-云南-市场执行 保山营业所 何双艳 1007095 CL21155 CL21155 CL21155 KM79000 YN01007095 KM79000 101549 Shuang Yan [email protected]CCCIL-云南-市场执行 保山营业所 何双艳 1007095 CL21155 CL21155 CL21155 KM79000 YN101549 KM79000 101549 Shuang Yan [email protected]CCCIL-云南-绩效财务 财务会计 王乙冰 1007102 CL21177 CL21177 KM65017 101565 Vivian [email protected]CCCIL-云南-绩效财务 财务会计 王乙冰 1007102 CL25196 KM65017 101565 Vivian [email protected]CCCIL-云南-绩效财务 信息技术 吕坤 1007311 CL21199 CL21199 CL21199 KM79265 KM63718 KM63718 KM63718 101874 Kun [email protected]CCCIL-云南-绩效财务 信息技术 吕坤 1007311 CL21199 CL21199 CL21199 KM79265 KM73211 KM63718 KM63718 101874 Kun [email protected]CCCIL-云南-绩效财务 信息技术 吕坤 1007311 CL21199 CL21199 CL21199 KM79265 KM79265 KM63718 KM63718 101874 Kun [email protected]CCCIL-云南-市场执行 销售资产管理 白若熙 1024611 CL22315 CL22315 KM85299 1024611 Ruo Xi [email protected]CCCIL-云南-市场执行 销售资产管理 白若熙 1024611 CL22315 CL22315 KM85299 1024611 Ruo Xi [email protected]
记录为以上的这种形式,每个用户在后面的字段中有2或者3个用户,现在我是左外联接到主表上的,会有多条记录,如何让多记录的用户合并成一条记录,如果在其他字段上有多个值,让它们在合并以空格分开.
------解决方案--------------------
用这种形式,楼主照着写
select col1,col2,
col3=(select ' '+col3 from tb where col1=t.col1 and col2=t.col2 for xml path(''))
from tb t
group by col1,col2
------解决方案--------------------
- SQL code
if exists(select * From sysobjects where name = 'vw_test' and xtype = 'V') drop view vw_testGocreate view vw_Testasselect 'CCCIL-云南-市场执行' 资能部门, '保山营业所' 组织结构, '何双艳' 员工姓名 , '1007095' PCB100BI用户, 'CL21155' PCH100用户, 'CL21155' PCR200用户, 'CL21155' CTS用户 union allselect 'CCCIL-云南-市场执行', '保山营业所', '何双艳', 'KM79000', 'YN101549', 'CL21155', 'CL21155' union allselect 'CCCIL-云南-绩效财务', '财务会计', '王乙冰', '1007102', 'CL21177', 'CL21177', 'KM65017' union allselect 'CCCIL-云南-绩效财务', '财务会计', '王乙冰', '1007102', 'CL25196', 'KM65017', '101565' union allselect 'CCCIL-云南-绩效财务', '信息技术', '吕坤', '1007311', 'CL21199', 'CL21199', 'CL21199' union allselect 'CCCIL-云南-绩效财务', '信息技术', '吕坤', '1007311', 'CL21199', 'KM79265', 'CL21199' union allselect 'CCCIL-云南-绩效财务', '信息技术', '吕坤', '1007311', 'CL21199', 'KM63718', 'CL21199' union allselect 'CCCIL-云南-市场执行', '销售资产管理', '白若熙', '1024611', 'CL22315', 'CL22315', 'KM85299' union allselect 'CCCIL-云南-市场执行', '销售资产管理', '白若熙', '1024611', 'CL22315', 'CL22315', '1024611' Goif exists(select * from sysobjects where name = 'fn_MergeStr' and xtype = 'fn') drop function fn_MergeStrGocreate function fn_MergeStr(@name varchar(100), @Index integer)returns varchar(8000)asbegin[email protected] : 用来判断取那个字段,例如 1 代表 PCB100BI用户, 2代表 PCH100用户, 3代表PCR200用户等等 DECLARE @r varchar(8000) SET @r='' select @r = case @index when 1 then case when PCB100BI用户 <> left(@r, LEN(PCB100BI用户)) then @r + PCB100BI用户 + ' ' else @r end when 2 then case when PCH100用户 <> left(@r, LEN(PCH100用户)) then @r + PCH100用户 + ' ' else @r end when 3 then case when PCR200用户 <> left(@r, LEN(PCR200用户)) then @r + PCR200用户 + ' ' else @r end else '' end from vw_test where 员工姓名 = @name return @rendGOselect a.员工姓名, dbo.fn_MergeStr(员工姓名, 1) PCB100BI用户, dbo.fn_MergeStr(员工姓名, 2) PCH100用户, dbo.fn_MergeStr(员工姓名, 3) PCR200用户from (select distinct 员工姓名 from vw_test) a