首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在选择列表中有不同数量的列的联合?

在选择列表中有不同数量的列的联合?
EN

Stack Overflow用户
提问于 2011-10-10 19:43:38
回答 2查看 1.9K关注 0票数 0

我有这样的疑问,但我需要建立一个人人共享的联盟。但是每个查询在select列表中都有不同数量的列,这给出了错误:

使用UNION、INTERSECT或operator运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。

如何解决这个问题以避免错误?

代码语言:javascript
复制
     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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-10 19:52:10

你必须在联盟的每一边都有相同数量的列。您总是可以添加虚拟列才能到达那里--并将其填充为NULL或您选择的“不适用”值。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-10-10 19:47:14

问题在于查询的每个部分中的列数,而不是结果的数量。顶部有5列

  1. Descripcion_Error,
  2. Boleta
  3. Extension_Total,
  4. Area_Dedicada_Finca,
  5. Tenencia_Finca

底部有4人。

  1. Descripcion_Error,
  2. Boleta,
  3. AreaDedicadaCultivos,
  4. AreaSembrada

要将这些返回到一个结果集中,必须有相同数量的列,而位于相同序号位置的列需要具有兼容的数据类型。

还不清楚你想要的结果应该是什么样子。如果在第二个查询中没有合适的列可添加,则可以添加一个常量表达式来代替其中的一个列。在这种情况下,您可能需要UNION ALL而不是UNION (两者之间的区别是UNION添加了一个额外的重复删除步骤),或者应该将它们作为两个单独的结果带回应用程序。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7717810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档