求教如何把两个查询结果合并在一个表中
本帖最后由 Wasabia 于 2013-04-09 19:57:41 编辑 这里有两张表,里面的ID都是用的GUID
T_IdName表:把常用的基础数据(如性别、学历、政治面貌、婚姻状况等等),比较固定的值,一般不需要编辑的都记到T_IdName表里,通过Category来表示类别。。。。
ID Name Category
5A3DC838-CFBB-46BF-9917-376B8F4D6C49 女 性别
FDF01D27-1E90-4007-98C7-60E9918A267C 本科 学历
056F676D-B616-47D1-A224-8F1857E475B9 博士 学历
A5C772C2-218A-49F0-B6C7-96A77A35870E 硕士 学历
8A5032FA-6313-48E5-AAC9-A7A3D895EB9D 男 性别
AF629BD2-41E1-466C-9519-AFF094044B35 未知性别 性别
83B79927-7CD6-47D8-8F73-D4C7E8278709 高中及以下 学历
94F85EEE-65AB-418E-9F01-ED86D55A293E 大专 学历
T_PersonTest表:就是简化了的一张员工信息表,有员工ID、员工Name、性别ID、学历ID,但是具体的性别Name和学历Name要通过性别ID和学历ID去T_IdName表里获取(通过Category='性别'来取得男、女、未知性别,通过Category='学历'来取得博士、硕士、本科等)
ID Name GenderID EducationID
7955F1A1-7EF4-4460-B646-4DB6EDA21DFF BoBo 5A3DC838-CFBB-46BF-9917-376B8F4D6C49 FDF01D27-1E90-4007-98C7-60E9918A267C
D9A18273-9A9F-473E-9E2E-5EE63D2E01B1 JoJo 8A5032FA-6313-48E5-AAC9-A7A3D895EB9D A5C772C2-218A-49F0-B6C7-96A77A35870E
2E0643F1-FBEB-42FE-84C2-EF811D94F0D8 CiCi 5A3DC838-CFBB-46BF-9917-376B8F4D6C49 94F85EEE-65AB-418E-9F01-ED86D55A293E
现在就是想取得一张带性别Name和学历Name的表
比如
EmployeeID EmployeeName GenderID GenderName EducationID EducatinName
如果
select p.ID, P.Name, p.GenderID, i.Name Gname ,P.EducationID
from T_PersonTest p , T_IdName i
where ( p.GenderID = i.ID and i.category='性别' )
可以得到
ID Name GenderID Gname EducationID
7955F1A1-7EF4-4460-B646-4DB6EDA21DFFBoBo5A3DC838-CFBB-46BF-9917-376B8F4D6C49女FDF01D27-1E90-4007-98C7-60E9918A267C
D9A18273-9A9F-473E-9E2E-5EE63D2E01B1JoJo8A5032FA-6313-48E5-AAC9-A7A3D895EB9D男A5C772C2-218A-49F0-B6C7-96A77A35870E
2E0643F1-FBEB-42FE-84C2-EF811D94F0D8CiCi5A3DC838-CFBB-46BF-9917-376B8F4D6C49女94F85EEE-65AB-418E-9F01-ED86D55A293E
如果
select p.ID, P.Name, p.GenderID, i.Name Ename ,P.EducationID
from T_PersonTest p , T_IdName i
where ( p.EducationID=i.ID and i.category='学历')
则可以得到
ID Name GenderID Ename EducatinID
7955F1A1-7EF4-4460-B646-4DB6EDA21DFFBoBo5A3DC838-CFBB-46BF-9917-376B8F4D6C49本科FDF01D27-1E90-4007-98C7-60E9918A267C
D9A18273-9A9F-473E-9E2E-5EE63D2E01B1JoJo8A5032FA-6313-48E5-AAC9-A7A3D895EB9D硕士A5C772C2-218A-49F0-B6C7-96A77A35870E
2E0643F1-FBEB-42FE-84C2-EF811D94F0D8CiCi5A3DC838-CFBB-46BF-9917-376B8F4D6C49大专94F85EEE-65AB-418E-9F01-ED86D55A293E
但是,要怎么样才能得到下面这个表?(我用记事本拼出来的)
ID Name GenderID Gname EducationID Ename
7955F1A1-7EF4-4460-B646-4DB6EDA21DFFBoBo5A3DC838-CFBB-46BF-9917-376B8F4D6C49女FDF01D27-1E90-4007-98C7-60E9918A267C本科
D9A18273-9A9F-473E-9E2E-5EE63D2E01B1JoJo8A5032FA-6313-48E5-AAC9-A7A3D895EB9D男A5C772C2-218A-49F0-B6C7-96A77A35870E硕士
2E0643F1-FBEB-42FE-84C2-EF811D94F0D8CiCi5A3DC838-CFBB-46BF-9917-376B8F4D6C49女94F85EEE-65AB-418E-9F01-ED86D55A293E大专
[解决办法]
----------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-04-09 19:57:22
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
--Jun 17 2011 00:57:23
--Copyright (c) Microsoft Corporation
--Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[T_IdName]
if object_id('[T_IdName]') is not null drop table [T_IdName]
go
create table [T_IdName]([ID] uniqueidentifier,[Name] varchar(10),[Category] varchar(4))
insert [T_IdName]
select '5A3DC838-CFBB-46BF-9917-376B8F4D6C49','女','性别' union all
select 'FDF01D27-1E90-4007-98C7-60E9918A267C','本科','学历' union all
select '056F676D-B616-47D1-A224-8F1857E475B9','博士','学历' union all
select 'A5C772C2-218A-49F0-B6C7-96A77A35870E','硕士','学历' union all
select '8A5032FA-6313-48E5-AAC9-A7A3D895EB9D','男','性别' union all
select 'AF629BD2-41E1-466C-9519-AFF094044B35','未知性别','性别' union all
select '83B79927-7CD6-47D8-8F73-D4C7E8278709','高中及以下','学历' union all
select '94F85EEE-65AB-418E-9F01-ED86D55A293E','大专','学历'
--------------开始查询--------------------------
--> 测试数据:[T_PersonTest]
if object_id('[T_PersonTest]') is not null drop table [T_PersonTest]
go
create table [T_PersonTest]([ID] uniqueidentifier,[Name] varchar(4),[GenderID] uniqueidentifier,[EducationID] uniqueidentifier)
insert [T_PersonTest]
select '7955F1A1-7EF4-4460-B646-4DB6EDA21DFF','BoBo','5A3DC838-CFBB-46BF-9917-376B8F4D6C49','FDF01D27-1E90-4007-98C7-60E9918A267C' union all
select 'D9A18273-9A9F-473E-9E2E-5EE63D2E01B1','JoJo','8A5032FA-6313-48E5-AAC9-A7A3D895EB9D','A5C772C2-218A-49F0-B6C7-96A77A35870E' union all
select '2E0643F1-FBEB-42FE-84C2-EF811D94F0D8','CiCi','5A3DC838-CFBB-46BF-9917-376B8F4D6C49','94F85EEE-65AB-418E-9F01-ED86D55A293E'
--------------开始查询--------------------------
SELECT id ,
NAME ,
GenderID ,
MAX(Gname) Gname ,
EducationID ,
MAX(Ename) Ename
FROM ( SELECT p.ID ,
P.Name ,
p.GenderID ,
i.Name Gname ,
P.EducationID ,
NULL Ename
FROM T_PersonTest p ,
T_IdName i
WHERE ( p.GenderID = i.ID
AND i.category = '性别'
)
UNION ALL
SELECT p.ID ,
P.Name ,
p.GenderID ,
NULL ,
P.EducationID ,
i.Name Ename
FROM T_PersonTest p ,
T_IdName i
WHERE ( p.EducationID = i.ID
AND i.category = '学历'
)
) a
GROUP BY id ,
NAME ,
GenderID ,
EducationID
----------------结果----------------------------
/*
id NAME GenderID Gname EducationID Ename
------------------------------------ ---- ------------------------------------ ---------- ------------------------------------ ----------
7955F1A1-7EF4-4460-B646-4DB6EDA21DFF BoBo 5A3DC838-CFBB-46BF-9917-376B8F4D6C49 女 FDF01D27-1E90-4007-98C7-60E9918A267C 本科
D9A18273-9A9F-473E-9E2E-5EE63D2E01B1 JoJo 8A5032FA-6313-48E5-AAC9-A7A3D895EB9D 男 A5C772C2-218A-49F0-B6C7-96A77A35870E 硕士
2E0643F1-FBEB-42FE-84C2-EF811D94F0D8 CiCi 5A3DC838-CFBB-46BF-9917-376B8F4D6C49 女 94F85EEE-65AB-418E-9F01-ED86D55A293E 大专
*/