【发布时间】:2017-02-07 07:28:35
【问题描述】:
我在数据库中有四个表:
表 1:Employee_Details
-----------------------------------------------------------------------
| Employee ID | Name | Department |DateofJoining |
-----------------------------------------------------------------------
| | | | |
| e1 | name1 | d1 | date1 |
| e2 | name2 | d2 | date2 |
| e3 | name3 | d3 | date3 |
-----------------------------------------------------------------------
表 2:Employee_SkillSet
----------------------------------------------------------------------------
| EmployeeID | SkillId | SkillName | SkillExperience | SkillRating |
----------------------------------------------------------------------------
| | | | | |
| e1 | s1 | skill1 | 11| 11|
| e1 | s2 | skill2 | 12| 12|
| e1 | s3 | skill3 | 13| 13|
| e2 | s1 | skill1 | 21| 21|
| e2 | s2 | skill2 | 22| 22|
| e2 | s3 | skill3 | 23| 23|
----------------------------------------------------------------------------
表 3:Employee_Certifications
-----------------------------------------------------------------------
| EmployeeID | CertificationID | Name |
-----------------------------------------------------------------------
| | | |
| e1 | c1 | cname1 |
| e1 | c2 | cname2 |
| e2 | c3 | cname3 |
-----------------------------------------------------------------------
表 4:Other_Details
----------------------------------------------------------------------------
| EmployeeId | TotalExp | Qualification | Specialization |
----------------------------------------------------------------------------
| | | | |
| e1 | 1 | q1 | abc |
| e2 | 2 | q2 | xyz |
----------------------------------------------------------------------------
现在,必须查询以上四个表才能得到如下输出:
+------------+-------+-------------+---------------+---------+----------------+----------------+------------+----------------+--------+--------------+------------------+
| EmployeeID | Name | Department | Qualification | Tot_Exp | Specialization | Certifications | Skill1_Exp | Skill1_Rating | ……………… | Skill100_Exp | Skill100_Rating |
+------------+-------+-------------+---------------+---------+----------------+----------------+------------+----------------+--------+--------------+------------------+
| | | | | | | | | | | | |
| e1 | name1 | d1 | q1 | 1 | spec1 | c1,c2 | 11 | 11 | ……………. | ………………… | ……………………… |
| e2 | name2 | d2 | q2 | 2 | spec2 | c3 | 21 | 21 | ……………. | ………………… | ……………………… |
+------------+-------+-------------+---------------+---------+----------------+----------------+------------+----------------+--------+--------------+------------------+
到目前为止,我已经能够对表 2-Employee_SkillSet 执行查询(使用动态 SQL),如下所示:
----------------------------------------------------------------------------
| EmpId | S1_Exp | S1_Rating | S2_Exp | S2_Rating | S3_Exp | S3_Rating |....
----------------------------------------------------------------------------
| | | | | | | |
| e1 | 11 | 11 | 12 | 12 | 13 | 13 |....
| e2 | 21 | 21 | 22 | 22 | 23 | 23 |....
| e3 | 31 | 31 | 32 | 32 | 33 | 33 |....
----------------------------------------------------------------------------
P.S. S is for Skill which I abbreviated over here to conserve space
我的问题是,我如何将其他三个表逐行加入以获得所需的输出?
我可能应该指出,我对加入、透视/取消透视、交叉应用以及介于两者之间的所有内容都很陌生,所以即使答案很简单,我似乎也无法弄清楚。
编辑
创建脚本:
CREATE TABLE Employee_Details (
[Employee ID] nvarchar(2),
[Name] nvarchar(10),
Department nvarchar(2),
DateofJoining nvarchar(5)
)
INSERT INTO Employee_Details VALUES
('e1', 'name1', 'd1', 'date1'),
('e2', 'name2', 'd2', 'date2'),
('e3', 'name3', 'd3', 'date3')
CREATE TABLE Employee_SkillSet (
EmployeeID nvarchar(2),
SkillId nvarchar(2),
SkillName nvarchar(10),
SkillExperience int,
SkillRating int
)
INSERT INTO Employee_SkillSet VALUES
('e1', 's1', 'skill1', 11, 11),
('e1', 's2', 'skill2', 12, 12),
('e1', 's3', 'skill3', 13, 13),
('e2', 's1', 'skill1', 21, 21),
('e2', 's2', 'skill2', 22, 22),
('e2', 's3', 'skill3', 23, 23)
CREATE TABLE Employee_Certifications (
EmployeeID nvarchar(2),
CertificationID nvarchar(2),
[Name] nvarchar(10)
)
INSERT INTO Employee_Certifications VALUES
('e1', 'c1', 'cname1'),
('e1', 'c2', 'cname2'),
('e2', 'c3', 'cname3')
CREATE TABLE Other_Details (
EmployeeId nvarchar(2),
TotalExp int,
Qualification nvarchar(2),
Specialization nvarchar(100)
)
INSERT INTO Other_Details VALUES
('e1', 1, 'q1', 'abc'),
('e2', 2, 'q2', 'xyz')
创建脚本:
【问题讨论】:
-
不就是对empID的加入吗?您可能需要的唯一东西是用于连接列(例如认证)的 STUFF FOR XML PATH('') 语句。
-
是的,它是 EmpId 上的联接。我想不通的是如何旋转结果表,以便与一个 EmpID 对应的所有数据都在一行中
标签: sql sql-server sql-server-2008 tsql join