这是我的previous post的延续。我的两个表如下所示:SQL联合加入
Table1
Name Id Amount
Name1 1 99
Name1 1 30
Name1 9 120.2
Name2 21 348
Name2 21 21
Name3 41 99
Name6 20 23
Table2
Name Id Return Amount
Name1 1 99
Name1 1 30
Name1 9 120.2
Name2 21 348
Name2 21 21
Name3 41 99
Name4 19 923.2
Name5 23 12
我需要一个结果表看起来像这样:
Name Id Amounts Returns
Name1 1 2 2
Name1 9 1 2
Name2 21 2 1
Name3 41 1 1
Name4 1 0 1
Name5 23 0 1
Name6 20 1 0
我已经试过这样的事情:
SELECT
[Name],
[Id],
ISNULL(count([Amount]), 0) as 'Amounts'
FROM table1 AS A
GROUP BY [Name], [Id]
UNION (
SELECT
[Name],
[Id],
ISNULL(count([Return Amount]), 0) as 'Returns'
FROM
table2 AS B
GROUP BY [Name], [Id]
)
但是,这给了我:
Name Id Amounts
Name1 1 4
Name1 9 3
Name2 21 3
Name3 41 2
Name4 1 1
Name5 23 1
Name6 20 1
我知道我需要把Return Amount
放在SELECT语句中,但我不知道该怎么做,因为这个联合,我尝试过的所有东西都会导致语法错误。
这是怎么回事?
更新1: 尝试
SELECT
A.[Name],
A.[Id],
count(A.[Amount]),
count(B.[Return])
FROM (
SELECT
[Name],
[Id],
count([Amount]) as 'Amounts'
FROM table1
UNION
SELECT
[Name],
[Id],
count([Return]) as 'Returns'
FROM table2
) AS A
LEFT JOIN table2 as B on A.[Id] = B.[Id]
GROUP BY A.[Name], A.[Id]
但我得到的错误:
Msg 8120, Level 16, State 1, Line 8
Column 'table1.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 207, Level 16, State 1, Line 4
Invalid column name 'Amount'.
你刚才问这个吗?你可以用这个答案来解决这个问题。 http://stackoverflow.com/questions/42280207/sql-partial-full-outer-join – manderson
返回9应该是1不是2 .. – scaisEdge
可能重复[SQL部分完全外部联接](http:// stackoverflow。 com/questions/42280207/sql-partial-full-outer-join) –