我在我的工作中使用了一个名为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的替代方案完成这些报告的能力有限。请指教。
答案 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订购,因为第二个查询中的列名不是最终结果集中列的名称。只有第一个查询中的名称。