SQL将两个视图合并为一个

时间:2017-05-10 19:18:32

标签: sql-server views

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

Here are my two views and their table structure

我希望最终结果为look like this

原始列:客户ID,发票编号,检查日期,年份和费用说明简单地堆叠在一起。列:费用类型,账单金额,负债金额和总额也会相互堆叠,但如果相应的视图中没有值,则默认为空(或无)。

我相信我需要做的是将一些列(名称相同的列)与union(?)相关联,但其余列保持原样并且当没有值用于填充空值时(甚至更好,没什么)。我试图让他们进入一个表,以便我可以使用我的一个数据源(而不是两个单独的数据源)的数据透视表。

很抱歉格式不佳(我使用的是图片,因为我无法弄清楚如何正确使用?)。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以按如下方式创建视图:

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