如何创建组合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上的输出?
日期信息可能有所不同,如表中所示。
答
尝试......
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;
答
如何组合这两个表并不明显。我认为这是你想要的,但你能确认吗?
- TableA.Date是最重要的字段;如果给定日期出现在TableA中,那么它将包含在视图中,但如果它只出现在TableB中,则不会。
- 如果某个日期在TableA和TableB中有记录,并且记录具有匹配的ID,则它们在视图中合并为一行,SUMA取自TableA.Sum,SUMB取为TableA.Sum * TableB.Sum(例如Date :01/01/2010,ID:1)(例如:日期:01/03/2010 ID:3)。
- 如果日期在表A表B和具有不同ID的记录,该视图分别包括这些记录而不会在所有的总和值相乘(例如日期02/01/2010,ID:1和ID:2)
你可能需要解释你是如何得出这些结果的......这并不明显。 – 2010-01-18 13:56:12