日期:2014-05-18 浏览次数:20769 次
----------------------------
-- 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 行受影响)
*/