如何解决MS SQL中的语句中的案例语句
我想根据条件比较IN
语句中的两个不同的表。
SELECT DISTINCT
cts.ContactType,ISNULL(ctl.[Description],CONCAT('Unknown Contact Type: ',cts.ContactType)) AS [Description]
FROM
( SELECT Null AS [ContactType]
WHERE ISNULL(Null,'') <> ''
UNION ALL
SELECT DISTINCT cta.ContactType
FROM
(SELECT u.AccessUserID
FROM v2010_vUsers u
WHERE u.UserID = 'harry_1@cared_t'
UNION ALL
SELECT ur.AccessUserID
FROM v2010_UserRoles ur
WHERE ur.UserID = 'harry_1@cared_t') r --Roles user has
INNER JOIN v2010_UDV_ContactType_AccessMatrix_Full cta --ContactTypes Accessible
ON cta.AccessUserID = r.AccessUserID) cts --ContactTypes Selectable
LEFT JOIN v2010_ListEntries ctl --ContactType List
ON ctl.ListId='CONTACTTYPE' and ctl.Code = cts.ContactType
WHERE cts.ContactType In
(
CASE WHEN (SELECT dbo.f2010_IsFeatureAllowedInTenancy('ContactTypeSC',dbo.f2010_PartnerDivisionID('06b30841-2496-48ef-b91a-21f06a9299f2'))) = '1'
THEN (SELECT Code From v2010_ListEntries WHERE ListId='CONTACTTYPESC')
ELSE (SELECT Code From v2010_ListEntries WHERE ListId='CONTACTTYPE')
END
)
错误:子查询返回了多个值。这是不允许的 当子查询遵循=,!=,,> =时,或者当子查询为 用作表达式。
错误在以下几行:
WHERE cts.ContactType In
(
CASE WHEN (SELECT dbo.f2010_IsFeatureAllowedInTenancy('ContactTypeSC',dbo.f2010_PartnerDivisionID('06b30841-2496-48ef-b91a-21f06a9299f2'))) = '1'
THEN (SELECT Code From v2010_ListEntries WHERE ListId='CONTACTTYPESC')
ELSE (SELECT Code From v2010_ListEntries WHERE ListId='CONTACTTYPE')
END
)
在IN语句中,我无法使用大小写。如果我在WHERE cts.ContactType中写(从v2010_ListEntries中的SELECT代码WHERE ListId ='CONTACTTYPESC'),它可以工作,但是我想比较条件并基于条件比较表。
解决方法
很难确定多行问题的来源,但我在想:
WHERE (dbo.f2010_IsFeatureAllowedInTenancy('ContactTypeSC',dbo.f2010_PartnerDivisionID('06b30841-2496-48ef-b91a-21f06a9299f2')) = '1' and
cts.ContactType In (SELECT Code From v2010_ListEntries WHERE ListId = 'CONTACTTYPESC')
) OR
(dbo.f2010_IsFeatureAllowedInTenancy('ContactTypeSC',dbo.f2010_PartnerDivisionID('06b30841-2496-48ef-b91a-21f06a9299f2')) <> '1' and
cts.ContactType In (SELECT Code From v2010_ListEntries WHERE ListId = 'CONTACTTYPE'')
)
或更简单地说:
cts.ContactType In (SELECT le.Code
FROM v2010_ListEntries le CROSS JOIN
(VALUES (CASE WHEN dbo.f2010_IsFeatureAllowedInTenancy('ContactTypeSC',dbo.f2010_PartnerDivisionID('06b30841-2496-48ef-b91a-21f06a9299f2')) THEN 'CONTACTTYPESC' ELSE 'CONTACTTYPESC' END)) v(listId)
WHERE le.ListId = v.ListId
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。