0

我正在为我的公司提取报告,并且需要提取我遇到问题的特定报告。我们正在使用 SQL Server 2012,我正在提取 SQL 报告。

我需要的是提取一个简单的报告:

组名、组内成员列表;组长。

但是,问题是主管以及成员和组名都来自一个表,以便获取相关信息。目前这里是我的SQL代码如下:

Use DATABASE
go

--   This is the select portion deciding the columns needed.    
select 
C.group_name
,C2.first_name
,C2.last_name

-- These are the tables that the query is pulling from.

FROM db..groups AS G
LEFT OUTER JOIN db..contact AS C
ON G.group_id=C.contact_id
INNER JOIN db..contact AS C2
ON G.member=C2.contact_id
go

这拉出了第一部分:

组名,然后是该组中成员的名字,然后是该组中成员的姓氏。

但是,我无法获得主管部分。这部分使用 supervisor_id 列下的表db.contact作为键。supervisor_id使用与普通contact_id相同的唯一 ID ,但在同一个表中。一些contact_id 的supervisor_id 是同一个表中的其他contact_id,因此是外键。

我怎样才能获得与 group_id 相等的contact_id 的supervisor_id 的contact_id?

4

1 回答 1

0

在我们等待细节的同时快速尝试一下

你知道你需要组,我假设你不关心没有成员的组。因此,组 INNER 加入了联系。这会生成您的直接组成员身份。要获得主管,您需要在特定联系人行中考虑主管。

你可能没有老板,或者你的老板可能是你自己。看看各种人力资源系统如何记录这一点总是很有趣。在我的示例中,我假设主管不向任何人报告而是向他们自己报告。

SELECT
    G.group_name
,   C.first_name
,   C.last_name
    -- this may produce nulls depending on outer vs inner join below
,   CS.first_name AS supervisor_first_name
,   CS.last_name AS supervisor_last_name
FROM
    dbo.Groups AS G
    INNER JOIN
        dbo.Contact AS C
        ON C.contact_id = G.member
    LEFT OUTER JOIN
        dbo.Contact AS CS
        ON CS.contact_id = C.supervisor_id;

根据您希望报告数据的准确程度,我们可以使用各种技巧来报告该数据。特别是,GROUPING SETS可能会派上用场。

SQLFiddle

于 2013-10-08T01:28:44.687 回答