微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS SQLSAP B1“当未使用EXISTS引入子查询时,在选择列表中只能指定一个表达式...”

如何解决MS SQLSAP B1“当未使用EXISTS引入子查询时,在选择列表中只能指定一个表达式...”

我已将此SQL查询用于SAP B1数据库,该数据库应根据用户组运行不同的查询

    SELECT CASE
           WHEN T0.GroupId = '2'
           THEN
(
    SELECT T0.Substitute,T0.ItemCode,T1.ItemName
    FROM OSCN T0
         INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
    WHERE T0.CardCode = 'CV-1234'
)
           ELSE(CASE
                    WHEN(T0.GroupId = '4')
                    THEN
(
    SELECT T0.ItemCode
    FROM OSCN T0
    WHERE T0.CardCode = 'CV-1234'
)
                    ELSE ''
                END)
       END
FROM OUGR T0
     INNER JOIN USR7 T1 ON T1.UserId = T1.UserId
WHERE T1.UserId = 'George'

但是当我运行它时,出现一个错误“当未将EXISTS引入子查询时,只能在选择列表中指定一个表达式”。

感谢任何帮助。 预先感谢。

解决方法

您不能像这样编写SQL。如果您考虑一个非常简单的SQL模板:

SELECT a,b
FROM table1
WHERE x = y;

a和b只能是单个值;如果您考虑一下,让“ a”对应多个值(我的意思是多个列)是没有意义的。没有动态SQL之类的东西,SQL语句的结构(或其结果的结构)在执行时是不确定的,也可能在行与行之间变化(可以动态构造SQL语句,但固定在点就执行了。

因此,您可以根据需要使用复杂的SQL替换'a',但该SQL必须始终产生单个值。

不知道您的SAPB1环境是否支持它,但是处理此类问题的通常方法是将其包装在代码中(Oracle中的PL / SQL,SQL Server中的T-SQL等)-因此您的代码确定要执行的CASE语句中的哪个SQL语句,然后只执行该1条语句

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。