Это продолжение моего previous post. Мои две таблиц выглядеть следующим образом:SQL Union with Join
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, но я не уверен, как это сделать, все, что я пробовал, приводит к синтаксической ошибке из-за этого объединения.
Каков правильный путь?
Update 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 shoud be 1 not 2 .. – scaisEdge
Возможный дубликат [SQL Partial Full Outer Join] (http: // stackoverflow. com/questions/42280207/sql-partial-full-external-join) –