SQL 将两个视图合二为一

Posted

技术标签:

【中文标题】SQL 将两个视图合二为一【英文标题】:SQL Merge Two Views into One 【发布时间】:2017-05-10 19:18:31 【问题描述】:

我有两个视图:TableA 和 TableB,它们的信息非常相似,但是有几个独特的列。

Here are my two views and their table structure

我想把最终结果发给look like this

原始列:客户 ID、发票编号、支票日期、年份和费用说明只是简单地堆叠在一起。列:Charge Type、Billed Amount、Liability Amount 和 Total 也会相互堆叠,但当相应视图中没有值时,它默认为 null(或没有)。

我相信我需要做的是将一些列(名称相同的列)与 union(?) 合并,但其余的保持原样,并且当没有为它们填充空值时(甚至更好,什么都没有)。我正在尝试将它们放入一个表中,以便我可以使用来自我的一个数据源(而不是两个单独的数据源)的数据透视表。

抱歉格式不好(我使用图像,因为我不知道如何正确使用 use |s)。

【问题讨论】:

提示:使用JOINS 【参考方案1】:

如果所有列都匹配,您可以使用 UNION ALL 将 2 个查询作为单个结果集返回。在您的情况下,您的列不完全匹配,但是对于任何列不匹配,您都显示 null - 因此在这种情况下,您可以只显示 null 和列名。 (例如 NULL 作为 'Total')

SELECT ClientID, InvoiceNumber, CheckDate, Year, ChargeDescription, 
       NULL as 'ChargeType', NULL as 'Total', BilledAmount, LiabilityAMount
FROM TABLEA
UNION ALL
SELECT ClientID, InvoiceNumber, CheckDate, Year, ChargeDescription, 
       ChargeType, Total, NULL as 'BilledAmount', NULL as 'LiabilityAmount'
FROM TABLEB

【讨论】:

感谢您的解释。我不知道您可以简单地强制使用 NULL 值并使用 UNION ALL。现在对我来说很有意义。【参考方案2】:

您可以创建如下视图:

create view yourview as 
    select clientid, [invoice number], [check date], [year], [Charge Description], Null as [Charge Type], Null as Total, [Billed Amount], [Liability Amount] from tableA
    union all
    select clientid, [invoice number], [check date], [year], [Charge Description],[Charge Type], Total,  Null as [Billed Amount],  Null as [Liability Amount] from tableB

【讨论】:

以上是关于SQL 将两个视图合二为一的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个 sql 查询合二为一? [复制]

将两个 T-SQL 数据透视查询合二为一

将两个视图合并为一个视图

将两个访问表合二为一

如何在 SQL 中组合两个查询? (子查询)

满足两个条件时将两个指示器警报合并为一个警报