我有这个问题,但我需要为所有人建立一个联盟.但是每个查询在select-list中有不同数量的列,这给了我错误:
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式.
我该如何解决这个问题以避免错误?
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)
Run Code Online (Sandbox Code Playgroud)
问题是查询的每个部分中的列数,而不是结果的数量.顶部有5列
底部有4个.
要将这些返回到一个结果集中,必须具有相同数量的列,并且相同序号位置中的列需要具有兼容的数据类型.
目前尚不清楚您期望的结果应该是什么样子.如果在第二个查询中没有合适的列添加,那么您可以添加一个常量表达式来代替其中一个列.在这种情况下,您可能希望UNION ALL而不是UNION(两者之间的差异是UNION添加额外的重复删除步骤),或者它们应该只是作为两个单独的结果返回到您的应用程序.