2010-01-18 54 views
1

我想創建組合來自兩個表的數據的視圖,每個表中的示例數據如下所示。如何創建組合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

回答

2

嘗試......

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是你所需要的,因爲你想包括兩個表的結果,無論是否匹配。

0

我通常聯合兩個查詢在一起,然後將它們分組,像這樣:

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] 
0
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; 
0

如何組合這兩個表並不明顯。我認爲這是你想要的,但你能確認嗎?

  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)