SQL - 从多个视图创建视图

时间:2017-09-01 05:23:50

标签: sql sql-server view left-join

只是想知道,是否可以从多个视图创建视图?

我尝试使用Left Join从2个视图(Data_extract_A和Data_Extract_B)创建视图(Data_extract_C)。已经过了一个小时,它仍然没有完成编译结果。这是正常的吗?

以下是我使用的语法。

 Create view [TeamA].[Data_Extract_C] as

    select distinct

    [TeamA].[Data_Extract_A].Unique_ID, 
    sum ([TeamA].[Data_Extract_A].TotalFilesInput), 
    sum ([TeamA].[Data_Extract_B].TotalFilesOutput)

    from [TeamA].[Data_Extract_A]

    left join 

    [TeamA].[Data_Extract_B] 

    on 

    [TeamA].[Data_Extract_A].Unique_ID = [TeamA].[Data_Extract_B].Unique_ID 

    group by [TeamA].[Data_Extract_A].Unique_ID

go

感谢大家的帮助。 SQL Server 2012对我来说真的很新,因为我通常使用Excel进行数据分析。

3 个答案:

答案 0 :(得分:1)

  

只是想知道,是否可以从多个视图创建视图?

是的,这是可能的。您可以在其他视图中引用视图。因此,您在加入其他两个视图时创建视图的示例应该有效。

  

已经有一个小时了,它还没有完成编译   结果。这是正常的吗?

我不确定这一部分,即答案是“它取决于”。依靠什么?有几个因素,例如表的大小以及其他视图的复杂程度([TeamA]。[Data_Extract_A],[TeamA]。[Data_Extract_B]),您拥有(或没有)索引等等。

答案 1 :(得分:1)

我猜你真的想要这个:

select Unique_ID, 
       sum(TotalFilesInput), 
       sum(TotalFilesOutput)
from ((select a.Unique_ID, a.TotalFilesInput, 0 as TotalFilesOutput
       from [TeamA].[Data_Extract_A] a
      ) union all
      (select b.Unique_ID, 0 as TotalFilesInput, b.TotalFilesOutput
       from [TeamA].[Data_Extract_B] b
      )
     ) ab
group by Unique_ID;

您的糟糕表现可能是由于错误的join - 两行都有相同值的多行。

答案 2 :(得分:0)

Hay Adhitya Sanusi 试试这个..

首先使用加入

 CREATE VIEW [TeamA].[Data_Extract_C] 
    as  SELECT 
     [TeamA].Data_Extract_A].Unique_ID, 
    sum ([TeamA].[Data_Extract_A].TotalFilesInput), 
    sum ([TeamA].[Data_Extract_B].TotalFilesOutput)   from 
  [TeamA].[Data_Extract_A] LEFT JOIN [Data_Extract_B]
   [TeamA].[Data_Extract_A].Unique_ID = [TeamA].[Data_Extract_B].Unique_ID 
      Group by [TeamA].[Data_Extract_A].Unique_ID

使用UINON

CREATE VIEW myview as


SELECT ... FROM View1......
   UNION
   SELECT ... FROM View2 ....