0

帖子已修改!!!...

我需要有关 WHERE 条件的帮助,如下所示:

ID#1 属于工程部。

ID# 2 属于销售部

ID#3 属于其他部门。

ID# 4 属于 Eng-Level2 部门

ID# 5 属于 Eng-Level3 部门

ID# 6 属于 Eng-Level4 部门

我试图完成的是,如果 ID#1 日志运行此报告,它将显示属于他的活动(ID#1)和 Eng-Levelx(ID#4、ID#5 和 ID#6)。但是,如果 ID 属于其他部门(ID# 2 和 3),则只会向他/她显示以下活动。

这是我的非工作查询:

SELECT * FROM dbo.CRM_Activity
WHERE 
(ActivityOwnerID = 1579
AND [Status] = 'Open'
AND Status <> 'Deleted')
OR
    ActivityOwnerID IN (
        SELECT COALESCE(
            (SELECT Tech_ID FROM dbo.employee WHERE tech_ID = 1579 and POSITION = 'Engineering')
            ,  (SELECT Tech_ID FROM dbo.employee WHERE LEFT(first_name, 4) = 'Eng-')  --- THIS ONE FAILED BECAUSE IT RETURNS MULTIPLE RECORDS
        )
    )
    AND [Status] = 'Open'

ORDER BY CreatedDate DESC
4

2 回答 2

1

您可以改为使用,因此这将从两个查询UNION中获得唯一的列表。Tech_ID

SELECT * FROM dbo.CRM_Activity
WHERE 
    ActivityOwnerID IN (

            SELECT Tech_ID FROM dbo.employee WHERE tech_ID = 1579 and POSITION = 'Engineering'
            UNION
            SELECT Tech_ID FROM dbo.employee WHERE LEFT(first_name, 4) = 'Eng-'
        )
于 2013-09-25T20:28:09.233 回答
0

在您的情况下SELECT COALESCE(....,可以返回多个值,因为IN允许多个值,但是 orso 的结果SELECT Tech_ID FROM dbo.employee WHERE tech_ID = 1579 and POSITION = 'Engineering'必须是一个,因为COALESCE需要表达式(不是结果集)。

于 2013-09-25T20:30:42.080 回答