日期:2014-05-18 浏览次数:20643 次
---------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2011-12-23 15:19:48 -- Version: -- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) -- Apr 22 2011 11:57:00 -- Copyright (c) Microsoft Corporation -- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64) -- ---------------------------- --> 测试数据:[客户资料表] if object_id('[客户资料表]') is not null drop table [客户资料表] go create table [客户资料表]([ID] int,[NAME] varchar(4)) insert [客户资料表] select 10,'张三' union all select 11,'李四' union all select 12,'王五' --> 测试数据:[关系对应表] if object_id('[关系对应表]') is not null drop table [关系对应表] go create table [关系对应表]([AutoID] int,[ClientID] int,[GuanXi_ID] int) insert [关系对应表] select 1,10,11 union all select 2,11,12 --> 测试数据:[关系明细表] if object_id('[关系明细表]') is not null drop table [关系明细表] go create table [关系明细表]([GuanXiDetailID] int,[MiaoShu] varchar(4)) insert [关系明细表] select 1,'朋友' union all select 1,'同事' union all select 2,'兄弟' --------------开始查询-------------------------- ; with f as ( select a.id,a.name as 客户姓名,b.name as 关系人姓名,d.MiaoShu as 存在关系 from 客户资料表 a,客户资料表 b,关系对应表 c,关系明细表 d where a.ID=c.ClientID and c.AutoID=d.GuanXiDetailID and b.ID=c.GuanXi_ID ) select id, 客户姓名 ,关系人姓名,[存在关系]=stuff((select ','+[存在关系] from f where id=t.id for xml path('')), 1, 1, '') from f t group by id, 客户姓名 ,关系人姓名 ----------------结果---------------------------- /* id 客户姓名 关系人姓名 存在关系 ----------- ---- ----- ---------------------------------------------------------------------------------------------------------------- 10 张三 李四 朋友,同事 11 李四 王五 兄弟 (2 行受影响) */
------解决方案--------------------
if object_id('客户资料表') is not null drop table 客户资料表 go create table 客户资料表 ( id int, name varchar(10) ) go insert into 客户资料表 select 10,'张三' union all select 11,'李四' union all select 12,'王五' go if object_id('关系对应表') is not null drop table 关系对应表 go create table 关系对应表 ( AutoID int, ClientID int, GuanXi_ID int ) go insert into 关系对应表 select 1,10,11 union all select 2,11,12 go if object_id('关系明细表') is not null drop table 关系明细表 go create table 关系明细表 ( GuanXiDetailID int, MiaoShu varchar(10) ) go insert into 关系明细表 select 1,'朋友' union all select 1,'同事' union all select 2,'兄弟' go select ClientID,客户姓名=b.Name,关系人姓名=c.Name,存在关系 =(select '['+MiaoShu+']' from 关系明细表 where GuanXiDetailID=d.GuanXiDetailID for xml path('')) from 关系对应表 a inner join 客户资料表 b on a.ClientID=b.ID inner join 客户资料表 c on a.GuanXi_ID=c.ID inner join 关系明细表 d on a.AutoID=d.GuanXiDetailID group by ClientID,b.Name,c.Name,d.GuanXiDetailID go /* ClientID 客户姓名 关系人姓名 存在关系 ----------- ---------- ---------- ---------------------------------------------------------------------------------------------------------------- 10 张三 李四 [朋友][同事] 11 李四 王五 [兄弟] (2 行受影响) */