我需要比较一些日期,我的查询在第一个查询中得到3个日期=> 的 2011-09-01, 2011-10-01, 2011-11-01
第二个查询中的3个日期=> 的 2011-07-01, 2011-11-01, 2011-08-01
那么如何比较它们并避免这个SQL错误?:
“子查询返回多个值,当它跟随=,!=,<,< =,>,> =或用作表达式时,这是不正确的。”
由于
SELECT
c_Fk_IdBoleta as Numero_Boleta,
'Pregunta (12)' as Numero_Pregunta,
'El período transcurrido entre siembra y cosecha no corresponde al tipo de cultivo' as Detalle_Error
FROM
Clt_Sembrado as sembrado
WHERE
sembrado.c_Fk_IdBoleta = 45550711
GROUP BY sembrado.c_Fk_IdBoleta, sembrado.d_MesAnioSiembra, sembrado.d_MesAnioCosecha, sembrado.si_Fk_IdDesglose
HAVING
( SELECT sembrado.d_MesAnioCosecha
FROM Clt_Sembrado as sembrado, Clt_Desglose as desglose
WHERE sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose
AND sembrado.c_Fk_IdBoleta = 45550711
) > (SELECT DATEADD(Month,6,sembrado.d_MesAnioSiembra)
FROM Clt_Desglose as desglose, Clt_Sembrado as sembrado
WHERE (((sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose)AND
(desglose.c_Fk_CodCiiu4 = 0112.00
OR desglose.c_Fk_CodCiiu4 = 0111.01
OR desglose.c_Fk_CodCiiu4 = 0111.02
OR desglose.c_Fk_CodCiiu4 = 0113.01
OR desglose.c_Fk_CodCiiu4 = 0113.03
OR desglose.c_Fk_CodCiiu4 = 0113.05
OR desglose.c_Fk_CodCiiu4 = 0113.06
OR desglose.c_Fk_CodCiiu4 = 0113.07
OR desglose.c_Fk_CodCiiu4 = 0113.08
OR desglose.c_Fk_CodCiiu4 = 0113.10
))
AND sembrado.c_Fk_IdBoleta = 45550711))
以下是表格:问题是一个文字可以在表格Blt_Sembrado中插入一次或多次,我需要验证d_MesAnioCosecha是否更少(d_MesAnioSiembra + 6个月)。对于Blt_Sembrado表中插入的每个CULTIVE。
答案 0 :(得分:0)
你的问题在这里:
AND sembrado.c_fk_idboleta = 40480711) > (SELECT ...
为了完成这项工作,您必须确保您的子选择最多只返回一个值。
如果您的日期必须大于返回的所有日期,那么它与大于返回的最大日期相同,因此使用MAX
将解决您的问题:
AND sembrado.c_fk_idboleta = 40480711) > (SELECT
Dateadd(MONTH, 6, max(sembrado.d_mesaniosiembra))
...