2016-08-26 60 views
3

我有一个包含以下列的表exec_info:exec_name, exec_regID, exec_contact, approved_by, updated_by_user_idSQL Server查询不起作用

[注:approved_byupdated_by_user_id都有exec_regID]从表

我希望查询以获取所有记录,以及对approved_by的exec_name(如果有的话),并exec_name对updated_by_user_id(如果有的话) 。 我试过这个,但它不适合我。

SELECT e.exec_name, 
    e.exec_regid, 
    e.exec_contact, 
    e.approved_by, 
    a.exec_name AS ApprovedUser, 
    e.updated_by_user_id, 
    i.exec_name AS UpdatedUser 
FROM exec_info AS e, 
    exec_info AS a, 
    exec_info AS i 
WHERE e.approved_by = a.exec_regid 
    AND e.updated_by_user_id = i.exec_regid 

例如,我有一些数据。现在我想表现出同样的数据,因为它是唯一的区别是,approved_byupdated_by_user_id的通过有名称

exec_name    exec_regID exec_contact approved_by updated_by_user_id 
Ali Khan    FA13-BSE-001 4534543  FA13-BSE-001  FA13-BSE-001 
Tahir Khan   FA12-BSE-005 3564564  FA13-BSE-001 
Hassan Abdullah  SP13-BEE-020 23423234  FA12-BSE-005 
Abdul Rehman   FA15-BCC-033 34564566  FA13-BSE-001  FA13-BSE-001 

Image of the sample Data Here

+1

首先,它的SQL Server版本您使用的?您可以包含该标签。第二:请不要使用[Old Style Joins](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx )。 – NickyvV

+0

您不会从表格tblrole获取任何数据。为什么在你的sql中“tblrole as r”?你为什么把exec_info设置为e,就像我一样?无法得到你想要的。你想要所有的数据exec_name!= approved_by && exec_name!= updated_by_user_id? –

+0

如何将'tblrole'表与其他人联系起来? – gofr1

回答

0

请更换,使用正确的JOIN语法,我的样本数据添加到表明它必须很好地工作,如果approved_by和updated_by_user_id都有exec_regID

;WITH exec_info AS (
SELECT * 
FROM (VALUES 
('Rana','FA13-BSE001','03126006114',NULL,'FA13-BSE001'), 
('Tahir','SP14-BCS-197','234','FA13-BSE001','1'), 
('Hassan','SP14-BEE-76','','SP14-BCS-197','FA13-BSE001'), 
('Abdul','SP15-BSE-002','033331212122','SP14-BCS-197',NULL) 
) as t(exec_name, exec_regID, exec_contact, approved_by, updated_by_user_id) 
) 


SELECT e.exec_name, 
     e.exec_regid, 
     e.exec_contact, 
     e.approved_by, 
     a.exec_name AS ApprovedUser, 
     e.updated_by_user_id, 
     i.exec_name AS UpdatedUser 
FROM exec_info AS e 
LEFT JOIN exec_info a 
    ON e.approved_by = a.exec_regid 
LEFT JOIN exec_info i 
    ON e.updated_by_user_id = i.exec_regid 

输出:

exec_name exec_regid  exec_contact approved_by  ApprovedUser updated_by_user_id UpdatedUser 
Rana  FA13-BSE001  03126006114  NULL   NULL   FA13-BSE001   Rana 
Tahir  SP14-BCS-197 234    FA13-BSE001  Rana   1     NULL 
Hassan  SP14-BEE-76      SP14-BCS-197 Tahir   FA13-BSE001   Rana 
Abdul  SP15-BSE-002 033331212122 SP14-BCS-197 Tahir   NULL    NULL 
+0

这个查询也没有显示任何记录 –

+0

然后''approved_by'和'updated_by_user_id'列与'exec_regid'没有连接。 – gofr1

+0

我添加了一个数据样本,以显示查询必须工作。请添加数据样本。 – gofr1

0

利用外层空间应用

SELECT e.exec_name, 
     e.exec_regid, 
     e.exec_contact, 
     e.approved_by, 
     ApprovedUserTable.ApprovedUser, 
     e.updated_by_user_id, 
     UpdatedUserTable.UpdatedUser 
FROM exec_info AS e 
OUTER APPLY(
     SELECT a.exec_name AS ApprovedUser 
     FROM exec_info AS a 
     WHERE e.approved_by = a.exec_regid 
)ApprovedUserTable 
OUTER APPLY(
     SELECT i.exec_name AS UpdatedUser 
     FROM exec_info AS i 
     WHERE e.updated_by_user_id = i.exec_regid 
)UpdatedUserTable 
+0

感谢您的回复。它也工作:) –