(SQL)联合与其他数据的组合

时间:2016-05-23 20:07:43

标签: mysql sql-server union

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

我使用UNION来组合这些表,但我发现我无法再添加报告其余部分所需的数据。当我这样做时,我收到一条错误消息,指出:使用UNION,INTERSECT或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的替代方案完成这些报告的能力有限。请指教。

1 个答案:

答案 0 :(得分:3)

错误消息告诉您完整的故事。使用联合时,BOTH查询必须具有相同数量的列。只需添加一些硬编码的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订购,因为第二个查询中的列名不是最终结果集中列的名称。只有第一个查询中的名称。