2017-02-15 20 views
0

У меня есть таблица вроде этого:SQL Count с внутренним соединением для одиночной таблицы

Name Id  Amount 
Name1 1  99 
Name1 1  30 
Name1 9  120.2 
Name2 21  348 
Name2 21  21 
Name3 41  99 

Я хочу, чтобы выбрать имя каждого, сгруппировать их по их идентификатору и сосчитать операции (NOT SUM). Поэтому я хочу следующую таблицу:

Name Id  Count 
Name1 1  2 
Name1 9  1 
Name2 21  2 
Name3 41  1 

Я попробовал этот SQL:

SELECT 
    [Name], 
    [Id] 
FROM table1 A 
INNER JOIN (
       SELECT 
       [Id], 
       count([Amount]) as 'Count' 
       FROM 
        table1 
       GROUP BY [Id] 
      ) 
B ON A.[Id] = B.[Id] 

Но я получаю следующее сообщение об ошибке: Ambiguous column name 'Id'.

Что я делаю неправильно?

+1

Вы действительно не нужно внутреннее соединение. –

+0

См. Ответ ниже от @JuanCarlosOropeza. Но причина, по которой вы получали эту ошибку, заключается в том, что в вашем подзапросе невозможно узнать, из какой таблицы вы хотите получить идентификатор. Помните, что в точке подзапрос И основной запрос находятся в области видимости. Вы также должны соотнести этот подзапрос с основным запросом. –

ответ

3
SELECT 
     [Name], 
     [Id], 
     count([Amount]) as 'Count' 
FROM 
     table1 
GROUP BY [Name], [Id] 
+0

Отлично, так просто! – Richard

0
SELECT 
A.[Name], 
A.[Id] 
FROM table1 A 
INNER JOIN (
      SELECT 
      table1.[Id], 
      count([Amount]) as 'Count' 
      FROM 
       table1 
      GROUP BY table1.[Id] 
     ) 
B ON A.[Id] = B.[Id] 
+0

@SeanLange Isnt присоединяется к '[ID]'? –

+0

Ahh да .... прямо там совершенно ясно. :( –