这不是当子查询跟随允许=,=,<, <= , >,> =当我使用子查询
问题描述:
当我运行以下查询:这不是当子查询跟随允许=,=,<, <= , >,> =当我使用子查询
SELECT
CASE
WHEN AT_EMPSCHEDULE.START1 <> '01/01/1900'
AND AT_EMPSCHEDULE.START2 <> '01/01/1900'
AND AT_EMPSCHEDULE.END2 <> '01/01/1900'
AND AT_EMPSCHEDULE.LEAVECODE =''
AND NOT EXISTS(SELECT PDATE
FROM HR_PUBHOLIDAY
WHERE PDATE=AT_EMPSCHEDULE.TRANDATE)
AND DATEPART(WEEKDAY,AT_EMPSCHEDULE.TRANDATE) <> 1
THEN
CAST((SELECT HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY
FROM HIS_GENSALARYD
WHERE (AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM
AND HIS_GENSALARYD.PAYTO
AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE)) AS DECIMAL(10, 2))
ELSE 0
END AS DAILYSALARY
FROM
HIS_GENSALARY
INNER JOIN
AT_EMPSCHEDULE ON HIS_GENSALARY.EMPCODE = AT_EMPSCHEDULE.EMPCODE
AND MONTH(TRANDATE) = HIS_GENSALARY.INMONTH
AND YEAR(TRANDATE) = HIS_GENSALARY.INYEAR
WHERE
HIS_GENSALARY.EMPCODE = HIS_GENSALARY.EMPCODE
我得到的消息:
子查询返回了超过1个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。
答
的问题是在这里:
(SELECT HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY
FROM HIS_GENSALARYD
WHERE AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM
AND HIS_GENSALARYD.PAYTO
AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE)
您已经用作表达式。根据错误消息,它必须只有有效产生一个结果在哪里使用过它;即它绝不能返回多于一行,但至少有一次调用返回了多行。
要强制它只返回一行,应用聚合函数;一个明显的选择是max()
:
(SELECT MAX(HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY)
FROM HIS_GENSALARYD
WHERE AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM
AND HIS_GENSALARYD.PAYTO
AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE)
在上下文中,子查询最多可以返回一行。 SQL Server正在期待一个标量值。单一的价值。不是结果集,观察到的行为是预期的,并与记录的行为一致。有*问题*吗?也许您想要返回单个值,例如,使用AVG之类的聚合函数?我们只是猜测。 – spencer7593