SQL语句 - 难以从一个表生成两个字段

时间:2014-12-02 16:34:53

标签: sql sql-server sql-server-2008 reporting-services

我对SQL比较陌生,能够编写一些带有JOIN,WHERE的简单语句。我也有一些SSRS 2008的经验。但是我很难根据一个表生成两个(唯一的)名称列表

我正在尝试制作一份包含工作人员的报告,其中列出了他们照顾的客户。所有名称(无论是员工还是客户)都保存在Person表中。我可以运行一个简单的查询列出所有工作人员或客户,但我无法列出这两个。

要生成客户列表,我的查询就是

SELECT p.Forenames, p.Surname
FROM Person AS p
INNER JOIN Client AS c ON p.ID = c.ID

并生成人员列表,我的查询将如上所述,但INNER JOIN如下:

INNER JOIN StaffMember AS s ON p.ID = s.ID

工作人员与客户之间的所有不同链接的链接如下(供参考)。

Client.ID = ClientRecordForm.Client_ID
Person.ID = ClientRecordForm.AssignedSupportWorker_ID
Person.ID = StaffMember.ID
StaffMember.ID = ClientRecordForm.AssignedSupportWorker_ID

为了帮助说明这一点,我可以运行一个查询来列出已分配给客户的员工。

SELECT DISTINCT p.Forenames, p.Surname
FROM Person AS p
INNER JOIN ClientRecordForm AS crf ON p.ID = crf.AssignedSupportWorker_ID

这最后一个查询基本上是我想要的,但我正在努力添加客户端名称,因为我似乎无法区分客户端,因为我已经在使用Person表

2 个答案:

答案 0 :(得分:1)

如果您想展示人并且能够区分客户,请尝试自我加入。

SELECT DISTINCT p.Forenames, p.Surname
FROM Person AS p
INNER JOIN ClientRecordForm AS crf ON p.ID = crf.AssignedSupportWorker_ID
inner join person as personClients on crf.clientid = personClients.id

如您所见,您可以加入另一个人表来获取StaffMember,您可以从personClients加入Client以获取信息......等等。

答案 1 :(得分:0)

这就是你想要的吗?

SELECT DISTINCT p.Forenames, p.Surname
FROM Person AS p
INNER JOIN ClientRecordForm AS crf 
    ON p.ID = crf.AssignedSupportWorker_ID
INNER JOIN Client AS c
    ON c.ID = crf.Client_ID