我正在为我的公司提取报告,我需要提取一份我遇到问题的具体报告。我们正在使用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?
答案 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可能派上用场。