Sql server SQL COALESCE返回超过1个值或替代解决方案
帖子被修改了 我需要以下WHERE条件的帮助: ID 1属于工程部 ID 2属于销售部门 ID 3属于其他部门 ID 4属于Eng-Level2部门 ID 5属于Eng-Level3部门 ID 6属于Eng-Level4部门 我试图完成的是,如果ID1日志运行此报告,它将显示属于他的活动ID1,以及Eng Levelx ID4、ID5和ID6。但是,如果ID属于其他部门ID 2和3,则只向其显示以下活动 以下是我的非工作查询:Sql server SQL COALESCE返回超过1个值或替代解决方案,sql-server,Sql Server,帖子被修改了 我需要以下WHERE条件的帮助: ID 1属于工程部 ID 2属于销售部门 ID 3属于其他部门 ID 4属于Eng-Level2部门 ID 5属于Eng-Level3部门 ID 6属于Eng-Level4部门 我试图完成的是,如果ID1日志运行此报告,它将显示属于他的活动ID1,以及Eng Levelx ID4、ID5和ID6。但是,如果ID属于其他部门ID 2和3,则只向其显示以下活动 以下是我的非工作查询: SELECT * FROM dbo.CRM_Activity WHE
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
您可以只使用UNION,因此这将从两个查询中获得唯一的技术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-'
)
在您的情况下,选择“合并…”。。。。可以返回多个值,因为IN允许多个值,但从dbo中选择Tech_ID的结果。其中Tech_ID=1579,POSITION='Engineering'左右的employee必须是一个,因为COALESCE期望表达式不是结果集。@christiandev,感谢您的响应,这不是我希望得到的结果。我现在正在修改这些问题,以便更清楚。。。。我的道歉!我修改了帖子,请你帮忙。谢谢大家!@milacay我怀疑它应该是LEFTposition,4='Eng-'而不是我使用的LEFTfirst_name存在,现在可以使用了。谢谢大家的帮助。