【问题标题】:SQL statement - difficulty producing two fields from one tableSQL 语句 - 难以从一张表中生成两个字段
【发布时间】:2014-12-02 16:34:53
【问题描述】:

我对 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 表

【问题讨论】:

  • 如果您编辑了问题并提供了示例数据和所需的结果,将会有所帮助。
  • 也许你不知道你可以加入两个以上的表?您可以加入 Client.ID = ClientRecordForm.Client_ID 以获取客户数据。

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


【解决方案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 以获取那里的信息...等等。

【讨论】:

  • 谢谢,这正是我想要的。我得到一份客户名单,旁边有相应的工作人员。我没有意识到您实际上可以“克隆” person 表。
【解决方案2】:

这是你想要的吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2014-07-10
    • 2014-10-30
    • 2011-06-04
    • 2021-12-03
    • 2018-08-30
    相关资源
    最近更新 更多