需要来自相同ID表的2个不同的ID

时间:2013-10-08 00:26:32

标签: sql sql-server-2012

我正在为我的公司提取报告,我需要提取一份我遇到问题的具体报告。我们正在使用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_ids的supervisor_id是同一个表中的其他contact_id,因此是外键。

我怎样才能这样做,以便我可以获得等于contact_id的supervisor_id的contact_id,它等于group_id?

1 个答案:

答案 0 :(得分: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