【问题标题】:SQL Count with Inner Join for Single Table单表内连接的 SQL 计数
【发布时间】:2017-07-04 19:29:08
【问题描述】:

我有一张这样的桌子:

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

我想选择每个名称,按他们的 id 对它们进行分组并计算交易(非总和)。所以我想要下表:

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'.

我做错了什么?

【问题讨论】:

  • 你真的不需要内连接。
  • 请参阅下面来自@JuanCarlosOropeza 的答案。但是您收到该错误的原因是因为在您的子查询中不可能知道您想要从哪个表中获取 Id。请记住,此时子查询和主查询都在范围内。您还需要将该子查询与主查询相关联。

标签: sql-server join stored-procedures inner-join


【解决方案1】:
SELECT
       [Name],
       [Id],
       count([Amount]) as 'Count'
FROM 
       table1
GROUP BY [Name], [Id]

【讨论】:

  • 完美,如此简单!
【解决方案2】:
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]

【讨论】:

  • @SeanLange 不是由[ID] 加入吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-08
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多