我有这样的疑问,但我需要建立一个人人共享的联盟。但是每个查询在select列表中都有不同数量的列,这给出了错误:
使用UNION、INTERSECT或operator运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。
如何解决这个问题以避免错误?
Select 'Pregunta:(8-9-10)Totales No Coinciden' as Descripcion_Error, c_Fk_IdBoleta as Boleta,
f_TotalAreaExtensionFinca as Extension_Total, f_TotalAreaDedicadaFinca
as Area_Dedicada_Finca, f_TotalAreaTenenciaFinca as Tenencia_Finca
from Fnc_TenenciaUsoTierra
where (f_TotalAreaExtensionFinca <> f_TotalAreaDedicadaFinca OR f_TotalAreaExtensionFinca <> f_TotalAreaTenenciaFinca)
AND Fnc_TenenciaUsoTierra.c_Fk_IdBoleta = @id_Boleta
UNION
SELECT 'Pregunta (12) El área sembrada es mayor al área dedicada a cultivos' as Descripcion_Error,
c_Fk_IdBoleta as Boleta,
(SELECT SUM(f_AreaDedicadaCultivos)
FROM Fnc_TenenciaUsoTierra
WHERE c_Fk_IdBoleta = sembrado.c_Fk_IdBoleta)
AS AreaDedicadaCultivos,
SUM(sembrado.f_AreaSiembra) as AreaSembrada
FROM
Clt_Sembrado as sembrado
WHERE
sembrado.c_Fk_IdBoleta = 45550711
GROUP BY sembrado.c_Fk_IdBoleta
HAVING SUM(sembrado.f_AreaSiembra) > (SELECT SUM(f_AreaDedicadaCultivos)
FROM Fnc_TenenciaUsoTierra
WHERE c_Fk_IdBoleta = sembrado.c_Fk_IdBoleta)发布于 2011-10-10 19:52:10
你必须在联盟的每一边都有相同数量的列。您总是可以添加虚拟列才能到达那里--并将其填充为NULL或您选择的“不适用”值。
SELECT 'Pregunta (12) El área sembrada es mayor al área dedicada a cultivos' as Descripcion_Error,
c_Fk_IdBoleta as Boleta,
(SELECT SUM(f_AreaDedicadaCultivos)
FROM Fnc_TenenciaUsoTierra
WHERE c_Fk_IdBoleta = sembrado.c_Fk_IdBoleta)
AS AreaDedicadaCultivos,
SUM(sembrado.f_AreaSiembra) as AreaSembrada,
NULL as Tenencia_Finca
FROM Clt_Sembrado as sembrado发布于 2011-10-10 19:47:14
问题在于查询的每个部分中的列数,而不是结果的数量。顶部有5列
底部有4人。
要将这些返回到一个结果集中,必须有相同数量的列,而位于相同序号位置的列需要具有兼容的数据类型。
还不清楚你想要的结果应该是什么样子。如果在第二个查询中没有合适的列可添加,则可以添加一个常量表达式来代替其中的一个列。在这种情况下,您可能需要UNION ALL而不是UNION (两者之间的区别是UNION添加了一个额外的重复删除步骤),或者应该将它们作为两个单独的结果带回应用程序。
https://stackoverflow.com/questions/7717810
复制相似问题