如何创建组合2个表中的多行的视图?

问题描述:

我想创建组合来自两个表的数据的视图,每个表中的示例数据如下所示。如何创建组合2个表中的多行的视图?

SELECT命令TableA的

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

结果

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

SELECT命令表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 

我如何能做到这一点的SQL Server 2005上的输出?

日期信息可能有所不同,如表中所示。

+0

你可能需要解释你是如何得出这些结果的......这并不明显。 – 2010-01-18 13:56:12

尝试......

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 

一个full outer join是你所需要的,因为你想包括两个表的结果,无论是否匹配。

我通常联合两个查询在一起,然后将它们分组,像这样:

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] 

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; 

如何组合这两个表并不明显。我认为这是你想要的,但你能确认吗?

  1. TableA.Date是最重要的字段;如果给定日期出现在TableA中,那么它将包含在视图中,但如果它只出现在TableB中,则不会。
  2. 如果某个日期在TableA和TableB中有记录,并且记录具有匹配的ID,则它们在视图中合并为一行,SUMA取自TableA.Sum,SUMB取为TableA.Sum * TableB.Sum(例如Date :01/01/2010,ID:1)(例如:日期:01/03/2010 ID:3)。
  3. 如果日期在表A表B和具有不同ID的记录,该视图分别包括这些记录而不会在所有的总和值相乘(例如日期02/01/2010,ID:1和ID:2)