【问题标题】:(SQL) Union combination with additional data(SQL) 与附加数据的联合组合
【发布时间】:2016-05-23 20:07:43
【问题描述】:

我在工作中使用 WiSys 的名为 Agility 的数据库程序。我遇到了一个不寻常的情况,我需要的部分数据位于特定表的一列中,而其余数据位于另一个表的另一列中。

我使用 UNION 来合并这些表,但我发现我无法添加报告其余部分所需的任何数据。当我这样做时,我收到一条错误消息,指出:使用 UNION、INTERSECT OR EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。

基本上,UNION 会根据需要工作,我已将数据合并到一列中,但是,我无法调用查询中所需的任何其他数据,因为 UNION 会阻止调用该数据。

这是我的查询,没有我需要的其他数据:

SELECT table1_sql.UnionColumn1, 
FROM   table1_sql 
UNION 
SELECT table2_sql.UnionColumn2 AS CombinedColumn 
FROM   table2_sql 
ORDER  BY CombinedColumn

我的报告中还需要包含这些额外列的 UNION:

SELECT table1_sql.UnionColumn1,
   table1_sql.ExtraColumn1,
   table1_sql.ExtraColumn2,
   table1_sql.ExtraColumn3,
   table1_sql.ExtraColumn4
FROM   table1_sql
UNION
SELECT table2_sql.UnionColumn2 AS CombinedColumn
FROM   table2_sql
ORDER  BY CombinedColumn

我尝试检索的数据示例如下: Example Data 其中 Order_No 是我想通过 UNION 加入的数据,其他所有数据都是 UNION 也需要但不允许使用的数据。

Agility 程序不像其他程序那样强大,因此我在使用 UNION 的替代方案完成此报告的能力方面受到一定限制。请指教。

【问题讨论】:

  • 您能否分享一些示例数据以及您想要获得的结果?这将有助于充实您的问题。
  • @Mureinik 我使用 UNION 来合并两个订单号列表,连同该列表,我需要销售日期、商品编号和商品数量。我将在我的问题中添加一个更好的示例,但一个简短的示例表如下:订单号 |日期 |项目_编号 |数量_Sold |

标签: mysql sql-server union


【解决方案1】:

错误消息告诉您完整的故事。使用联合时,两个查询必须具有相同数量的列。您可以通过简单地添加一些硬编码的 NULLS 来使用它。

SELECT table1_sql.UnionColumn1,
   table1_sql.ExtraColumn1,
   table1_sql.ExtraColumn2,
   table1_sql.ExtraColumn3,
   table1_sql.ExtraColumn4
FROM   table1_sql
UNION
SELECT table2_sql.UnionColumn2 AS CombinedColumn
, NULL
, NULL
, NULL
, NULL
FROM   table2_sql
ORDER  BY CombinedColumn

请注意,您必须按 UnionColumn1 排序,因为第二个查询中的列名不是最终结果集中的列名。仅来自第一个查询的名称。

【讨论】:

  • 这让我克服了我遇到的障碍!我从来没有想过在 UNION 的另一边输入 NULL,只是因为我认为错误需要某种数据平衡,而我从未意识到 NULL 可以完成这项工作。谢谢。
猜你喜欢
  • 2015-10-21
  • 2023-03-29
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多