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

sql表关联,多条记录合并为一条记录有关问题,求救!

2012-04-02 
sql表关联,多条记录合并为一条记录问题,求救!!合同表Id申请人经办人负责人合同内容1010203埃保常2030304ag

sql表关联,多条记录合并为一条记录问题,求救!!
合同表
Id 申请人 经办人 负责人 合同内容
1 01 02 03 埃保常
2 03 03 04 aggressive
3 05 04 05 嘎嘎
4 02 02 02 大厦噶尔外国


人力表
id 姓名
01 张三
02 李四
03 王五
04 小二
05 大傻
......


现在要用合同表关联人力,将同一条合同只显示一次。比如
1 张三 李四 王五 ....
2 王五 王五 小二 ....
......
请问这样在数据库里将如何实现??关联查询语句该如何写。

[解决办法]

SQL code
select  a.id,申请人=b.姓名, 经办人=c.姓名,负责人=d.姓名,a.合同内容from 合同表 aleft join 人力表  b on a.申请人=b.id left join 人力表  c on a.经办人=c.id left join 人力表  d on a.负责人=d.id
[解决办法]
SQL code
declare @ta table (id int,va varchar(10))declare @tb table (id int,vb varchar(10))insert into @ta select 1,'aa' insert into @ta select 2,'bc' insert into @ta select 3,'ccc'insert into @tb select 1,'2'insert into @tb select 3,'58' insert into @tb select 4,'67' --内连接简单写法select a.id,a.va,b.id,b.vb from @ta a,@tb bwhere a.id=b.id--内连接select a.id,a.va,b.id,b.vb from @ta a inner join @tb bon a.id=b.idselect a.id,a.va,b.id,b.vb from @ta a join @tb bon a.id=b.id--左连接(左外连接)--返回left join 子句中指定的左表的所有行,以及右表所匹配的行。select a.id,a.va,b.id,b.vb from @ta a left join @tb bon a.id=b.idselect a.id,a.va,b.id,b.vb from @ta a left outer join @tb bon a.id=b.id--右连接(右外连接)--返回right join 子句中指定的右表的所有行,以及左表所匹配的行。select a.id,a.va,b.id,b.vb from @ta a right join @tb bon a.id=b.idselect a.id,a.va,b.id,b.vb from @ta a right outer join @tb bon a.id=b.id--完整外连接--等同左连接+右连接select a.id,a.va,b.id,b.vb from @ta a full join @tb bon a.id=b.idselect a.id,a.va,b.id,b.vb from @ta a full outer join @tb bon a.id=b.id--交叉连接--没有两个表之间关系的交叉连接,将产生连接所涉及的表的笛卡尔积。select a.id,a.va,b.id,b.vb from @ta a cross join @tb bselect a.id,a.va,b.id,b.vb from @ta a,@tb b--自连接--一个表和其本身连接。select a.id,a.va,b.id,b.va from @ta a,@ta b where a.id=b.id+1
[解决办法]
SQL code
SELECT A.id,B.name AS 申请人,C.name AS 经办人,D.name AS 负责人FROM 合同表 AS A    JOIN 人力表 AS BON A.申请人=B.id    JOIN 人力表 AS CON A.经办人=C.id    JOIN 人力表 AS DON A.负责人=D.id
[解决办法]
SQL code
-----------------------------------  Author: htl258(Tony)--  Date  : 2009-08-02 13:42:15-----------------------------------> 生成测试数据表:合同表If not object_id('[合同表]') is null    Drop table [合同表]GoCreate table [合同表]([Id] int,[申请人] int,[经办人] int,[负责人] int,[合同内容] nvarchar(10))Insert 合同表Select 1,01,02,03,'埃保常' union allSelect 2,03,03,04,'aggressive' union allSelect 3,05,04,05,'嘎嘎' union allSelect 4,02,02,02,'大厦噶尔外国'Go--Select * from 合同表--> 生成测试数据表:人力表If not object_id('[人力表]') is null    Drop table [人力表]GoCreate table [人力表]([id] int,[姓名] nvarchar(2))Insert 人力表Select 01,'张三' union allSelect 02,'李四' union allSelect 03,'王五' union allSelect 04,'小二' union allSelect 05,'大傻'Go--Select * from 人力表-->SQL查询如下:select a.Id,b.[姓名] [申请人],c.姓名 [经办人],d.姓名 [负责人],合同内容from 合同表 a  join 人力表 b    on a.申请人=b.id  join 人力表 c    on a.经办人=c.id  join 人力表 d    on a.负责人=d.idorder by 1/*Id          申请人  经办人  负责人  合同内容----------- ---- ---- ---- ----------1           张三   李四   王五   埃保常2           王五   王五   小二   aggressive3           大傻   小二   大傻   嘎嘎4           李四   李四   李四   大厦噶尔外国(4 行受影响)*/
[解决办法]
SQL code
-----------------------------------  Author: htl258(Tony)--  Date  : 2009-08-02 13:42:15-----------------------------------> 生成测试数据表:合同表If not object_id('[合同表]') is null    Drop table [合同表]GoCreate table [合同表]([Id] int,[申请人] int,[经办人] int,[负责人] int,[合同内容] nvarchar(10))Insert 合同表Select 1,01,02,03,'埃保常' union allSelect 2,03,03,04,'aggressive' union allSelect 3,05,04,05,'嘎嘎' union allSelect 4,02,02,02,'大厦噶尔外国'Go--Select * from 合同表--> 生成测试数据表:人力表If not object_id('[人力表]') is null    Drop table [人力表]GoCreate table [人力表]([id] int,[姓名] nvarchar(2))Insert 人力表Select 01,'张三' union allSelect 02,'李四' union allSelect 03,'王五' union allSelect 04,'小二' union allSelect 05,'大傻'Go--Select * from 人力表-->SQL查询如下:select Id,    [申请人]=(select 姓名 from 人力表 where id=申请人),    [经办人]=(select 姓名 from 人力表 where id=经办人),    [负责人]=(select 姓名 from 人力表 where id=负责人),    合同内容from 合同表/*Id          申请人  经办人  负责人  合同内容----------- ---- ---- ---- ----------1           张三   李四   王五   埃保常2           王五   王五   小二   aggressive3           大傻   小二   大傻   嘎嘎4           李四   李四   李四   大厦噶尔外国(4 行受影响)*/ 


[解决办法]

SQL code
---测试数据---if object_id('[合同表]') is not null drop table [合同表]gocreate table [合同表]([Id] int,[申请人] varchar(2),[经办人] varchar(2),[负责人] varchar(2),[合同内容] varchar(12))insert [合同表]select 1,'01','02','03','埃保常' union allselect 2,'03','03','04','aggressive' union allselect 3,'05','04','05','嘎嘎' union allselect 4,'02','02','02','大厦噶尔外国'if object_id('[人力表]') is not null drop table [人力表]gocreate table [人力表]([id] varchar(2),[姓名] varchar(4))insert [人力表]select '01','张三' union allselect '02','李四' union allselect '03','王五' union allselect '04','小二' union allselect '05','大傻' ---查询---select   a.Id,  b.姓名 as 申请人,  c.姓名 as 经办人,  d.姓名 as 负责人,  a.合同内容from   [合同表] as aleft join  [人力表] as b on a.申请人=b.idleft join  [人力表] as c on a.经办人=c.idleft join  [人力表] as d on a.负责人=d.id---结果---Id          申请人  经办人  负责人  合同内容         ----------- ---- ---- ---- ------------ 1           张三   李四   王五   埃保常2           王五   王五   小二   aggressive3           大傻   小二   大傻   嘎嘎4           李四   李四   李四   大厦噶尔外国(所影响的行数为 4 行)
[解决办法]
SQL code
declare @合同表 table(Id int,  申请人 varchar(2) , 经办人 varchar(2),  负责人 varchar(2) ,合同内容 varchar(20))insert @合同表 select 1 ,   '01'  ,    '02' ,     '03'  ,    '埃保常' insert @合同表 select 2  ,  '03'  ,    '03' ,     '04' ,       'aggressive' insert @合同表 select 3  ,  '05'  ,    '04' ,     '05' ,     '嘎嘎' insert @合同表 select 4  ,  '02'  ,    '02' ,     '02' ,     '大厦噶尔外国' declare @人力表 table(id int,     姓名 varchar(10))insert @人力表 select '01' ,     '张三' insert @人力表 select '02'  ,    '李四' insert @人力表 select '03'  ,    '王五' insert @人力表 select '04'  ,    '小二' insert @人力表 select '05'  ,    '大傻' select  a.id,申请人=b.姓名, 经办人=c.姓名,负责人=d.姓名,a.合同内容from @合同表 aleft join @人力表  b on a.申请人=b.id left join @人力表  c on a.经办人=c.id left join @人力表  d on a.负责人=d.id /*id          申请人        经办人        负责人        合同内容                 ----------- ---------- ---------- ---------- -------------------- 1           张三         李四         王五         埃保常2           王五         王五         小二         aggressive3           大傻         小二         大傻         嘎嘎4           李四         李四         李四         大厦噶尔外国(所影响的行数为 4 行)*/
[解决办法]
SQL code
select Id,    申请人=(select 姓名 from 人力表 where id=申请人),    经办人=(select 姓名 from 人力表 where id=经办人),    负责人=(select 姓名 from 人力表 where id=负责人),    合同内容from 合同表 

热点排行