2017-02-15 1 views
0

Ich habe eine Tabelle wie folgt aus:SQL Count mit Inner Join für Single Table

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

Ich möchte jeden Namen wählen, führen sie durch ihre ID und die Transaktionen zählen (NICHT SUM). Deshalb möchte ich die folgende Tabelle:

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

Ich habe versucht, diese 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] 

Aber ich erhalte den folgenden Fehler: Ambiguous column name 'Id'.

Was mache ich falsch?

+1

Sie brauchen nicht wirklich die innere Verknüpfung. –

+0

Siehe die Antwort unten von @JuanCarlosOropeza. Der Grund dafür, dass Sie diesen Fehler erhalten haben, ist, dass Sie in Ihrer Unterabfrage nicht wissen können, von welcher Tabelle Sie eine ID erhalten möchten. Denken Sie daran, dass die Unterabfrage AND und die Hauptabfrage beide im Bereich liegen. Sie müssen diese Unterabfrage auch mit der Hauptabfrage korrelieren. –

Antwort

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

Perfekt, so einfach! – 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 Ist nicht mit '[ID]' verbunden? –

+0

Ahh ja .... genau da ganz klar. :( –