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
                   )


  

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...