我已经为SAP B1数据库使用了这个SQL查询,它应该根据用户的组运行不同的查询:
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条语句