使用UNION ALL合并销售与生产查询时如何保留全部字段?
查询两张表并合并结果
要解决UNION ALL合并后字段缺失的问题,核心是让两个查询的列数一致,且对应位置的字段类型兼容,同时显式补全对方查询中没有的字段(用NULL填充),这样合并后的结果集就能包含所有字段。
调整后的合并查询语句
-- 生产查询部分:补全销售查询特有的字段 SELECT Production.Date, Production.[Supplier/Demander], NULL AS Customer, -- 销售查询有该字段,生产查询无,用NULL填充 Item.Item, Item.Color, Production.[Opening BAL], Production.[In], NULL AS Out, -- 销售查询有该字段,生产查询无,用NULL填充 Production.[Adj(+)], NULL AS [Adj(-)], -- 销售查询有该字段,生产查询无,用NULL填充 Production.[Total IN], NULL AS [Total Out], -- 销售查询有该字段,生产查询无,用NULL填充 Item.Grade, Item.TYPE FROM Customers INNER JOIN ((Item INNER JOIN Production ON Item.[Item ID] = Production.[Item ID]) INNER JOIN Sales ON Item.[Item ID] = Sales.[Item ID]) ON Customers.Code = Sales.Code GROUP BY Production.Date, Production.[Supplier/Demander], Item.Item, Item.Color, Production.[Opening BAL], Production.[In], Production.[Adj(+)], Production.[Total IN], Item.Grade, Item.TYPE UNION ALL -- 销售查询部分:补全生产查询特有的字段 SELECT Sales.Date, Sales.[Supplier/Demander], Customers.Customer, Item.Item, Item.Color, NULL AS [Opening BAL], -- 生产查询有该字段,销售查询无,用NULL填充 NULL AS [In], -- 生产查询有该字段,销售查询无,用NULL填充 Sales.Out, NULL AS [Adj(+)], -- 生产查询有该字段,销售查询无,用NULL填充 Sales.[Adj(-)], NULL AS [Total IN], -- 生产查询有该字段,销售查询无,用NULL填充 Sales.[Total Out], Item.Grade, Item.TYPE FROM Customers INNER JOIN ((Item INNER JOIN Production ON Item.[Item ID] = Production.[Item ID]) INNER JOIN Sales ON Item.[Item ID] = Sales.[Item ID]) ON Customers.Code = Sales.Code GROUP BY Sales.Date, Sales.[Supplier/Demander], Customers.Customer, Item.Item, Item.Color, Sales.Out, Sales.[Adj(-)], Sales.[Total Out], Item.Grade, Item.TYPE;
关键说明
- 两个查询必须保持列数完全相同,缺失的字段用
NULL填充,同时给这些填充的字段指定和另一查询一致的别名,确保结果集列名统一。 - 对应位置的字段类型要兼容(比如日期字段对应日期字段,数值字段对应数值字段),避免合并时出现类型错误。
- 若不想用
NULL填充缺失字段,可替换为对应类型的默认值(比如数值字段用0,字符串字段用'')。
内容的提问来源于stack exchange,提问作者dianah kioko
相关产品推荐
相关产品推荐

