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

求教怎么把两个查询结果合并在一个表中

2013-04-21 
求教如何把两个查询结果合并在一个表中本帖最后由 Wasabia 于 2013-04-09 19:57:41 编辑这里有两张表,里面

求教如何把两个查询结果合并在一个表中
本帖最后由 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 大专
*/

热点排行