代码之家  ›  专栏  ›  技术社区  ›  David

如何创建合并两个表中多行的视图?

  •  1
  • David  · 技术社区  · 16 年前

    选择表格A的命令

    SELECT [ID], [Date], [SUM]
    FROM TableA
    

    ID    |    Date     |    SUM
    1     |    1/1/2010 |     2
    1     |    1/2/2010 |     4
    3     |    1/3/2010 |     6
    

    选择表格B的命令

    SELECT [ID], [Date], [SUM]
    FROM TableB
    

    结果

    ID    |    Date     |    SUM
    1     |    1/1/2010 |     5
    1     |    2/1/2010 |     3
    1     |   31/1/2010 |     2
    2     |    1/2/2010 |     20
    

    我想输出如下

    ID    |    Date     |    SUMA     |     SUMB
    1     |    1/1/2010 |     2       |      10
    1     |    1/2/2010 |     4       |       0
    2     |    1/2/2010 |     0       |      20
    3     |    1/3/2010 |     6       |       0
    

    如何在SQLServer2005上做到这一点?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Naeem Sarfraz    16 年前

    试试这个。。。

    SELECT 
     ISNULL(TableA.ID, TableB.ID) ID, 
     ISNULL(TableA.Date, TableB.Date), 
     ISNULL(TableA.Sum,0) SUMA, 
     ISNULL(TableB.Sum, 0) SUMB
    FROM 
     TableA FULL OUTER JOIN TableB 
     ON TableA.ID = TableB.ID AND TableA.Date = TableB.Date
    ORDER BY 
     ID
    

    A. full outer join 是您所需要的,因为无论是否存在匹配项,您都希望包含两个表的结果。

        2
  •  0
  •   Chris Latta    16 年前

    SELECT ID, [Date], SUM(SUMA) As SUMA, SUM(SUMB) AS SUMB
    FROM (
        SELECT ID, [Date], SUMA, 0 AS SUMB
        FROM TableA
        UNION ALL
        SELECT ID, [Date], 0 As SUMA, SUMB
        FROM TableB
        )
    GROUP BY ID, [Date]
    
        3
  •  0
  •   Rob Farley    16 年前
    SELECT 
       ISNULL(a.ID, b.ID) AS ID,
       ISNULL(a.Date, b.Date) AS Date,
       ISNULL(a.SUM, 0) AS SUMA,
       ISNULL(b.SUM, 0) AS SUMB,
    FROM 
       TableA AS a
       FULL JOIN
       TableB AS b
       ON a.ID = b.ID
       AND a.Date = b.Date;
    
        4
  •  0
  •   Vince Bowdren    16 年前

    不清楚您想要如何组合这两个表。我想这就是你想要的,但是你能确认一下吗?

    1. 表a.日期是最重要的字段;如果给定日期出现在表a中,则该日期将包含在视图中,但如果该日期仅出现在表B中,则不会包含在视图中。
    2. 如果某个日期在TableA和TableB中有具有不同ID的记录,则视图将分别包含这些记录,而不乘以总和值(例如,日期2010年1月2日,ID:1和ID:2)
    推荐文章