我正在使用 SQL Server 2012 上的 T-SQL 进行查询。这是一个复杂的查询,我想从 3 张表中查询一个列表。结果应该像这样:
期望输出:
我的3个表:
1) 项目: 项目ID、项目数据ID、成员版本ID
2) 项目数据: 项目数据ID、标题、状态ID
3) 成员: 成员ID、成员版本ID、成员类型ID、员工ID
项目数据
成员:MemberTypeId 1 = 经理,MemberTypeId 2 = 联系人,3 = 其他。
我的当前查询看起来像这样:
不幸的是,这还没有起作用。您知道如何解决这个问题吗?
谢谢。
ProjectId | Title | Manager | Contact | StatusId
----------+-------------+-----------+-----------+-----------
1 | projectX | 1123 | 4453 | 1
2 | projectY | 2245 | 5567 | 1
3 | projectZ | 3335 | 8899 | 1
我的3个表:
1) 项目: 项目ID、项目数据ID、成员版本ID
2) 项目数据: 项目数据ID、标题、状态ID
3) 成员: 成员ID、成员版本ID、成员类型ID、员工ID
棘手的部分是实现版本控制。因此,随着时间的推移,项目成员可能会发生变化,而且应该始终能够返回到先前的版本,这就是为什么我在Project和Members之间使用了MemberVersionId作为外键的原因。表格Project和ProjectData通过ProjectDataId相互关联。
因此,1个项目有1个OfferData和N个成员。
一些示例数据:
项目
ProjectId | ProjectDataId | MemberVersionId |
----------+---------------+-----------------+
1 | 2 | 1 |
2 | 3 | 1 |
3 | 4 | 1 |
项目数据
ProjectDataId | Title | StatusId
--------------+-------------+-----------
2 | projectX | 1
3 | projectY | 1
4 | projectZ | 1
成员:MemberTypeId 1 = 经理,MemberTypeId 2 = 联系人,3 = 其他。
MemberId | MemberVersionId | MemberTypeId | EmployeeId |
---------+-----------------+--------------+------------+
1 | 1 | 1 | 1123 |
2 | 1 | 2 | 4453 |
3 | 1 | 3 | 9999 |
4 | 2 | 1 | 2245 |
5 | 2 | 2 | 5567 |
6 | 2 | 3 | 9999 |
7 | 3 | 1 | 3335 |
8 | 3 | 2 | 8899 |
9 | 3 | 3 | 9999 |
我的当前查询看起来像这样:
SELECT ProjectId, Title, EmployeeId AS Manager, EmployeeId AS Contact, StatusId
FROM [MySchema].[Project] a,
[MySchema].[ProjectData] b,
[MySchema].[Members] c
WHERE a.ProjectDataId = b.ProjectDataId
AND a.MemberVersionId = c.MemberVersionId
不幸的是,这还没有起作用。您知道如何解决这个问题吗?
谢谢。