【问题标题】:SQL server for each distinct different sum每个不同的总和的 SQL 服务器
【发布时间】:2015-07-21 12:25:14
【问题描述】:

我想获得一个列表,其中包含不同国家/地区的名称,每个国家/地区的员工人数。我不能在 SQL Server 中使用 for each 循环。有什么方法可以实现我想要的吗?我可以使用 where country='input country',但我不想对每个国家都这样做。

Select   distinct Country,
     SUM(Test.[Number of Manager]) over () AS 'Number of Parts Staff/Manager',
     Count(Test.[Name]) over () AS 'Number of Test'

From Test;

【问题讨论】:

  • 你需要GROUP BY Country
  • 你为什么要否决这个问题?这背后的逻辑是什么?
  • 我没有投反对票,但我看到很多“rtfm”问题被投反对票,也许这就是原因......

标签: sql sql-server


【解决方案1】:

不要使用DISTINCT,而应该使用GROUP BY:

Select Country,
       SUM([Number of Manager]) AS 'Number of Parts Staff/Manager',
       Count([Name]) AS 'Number of Test'
From Test
GROUP BY Country

【讨论】:

  • 错误消息不可能来自我上面显示的 SQL。请确保您更改了 SUM 和 COUNT 行以匹配。所以删除OVER () 部分。
【解决方案2】:

我想你在找group by:

SELECT Country,
       SUM([Number of Manager]) AS 'Number of Parts Staff/Manager',
       Count([Name]) AS 'Number of Test'
FROM Test
GROUP BY Country;

【讨论】:

    【解决方案3】:

    您可以使用 PATITION BY

    来做到这一点
    Select   Country,
         SUM(Test.[Number of Manager]) over (partition by Country order by Country) AS 'Number of Parts Staff/Manager',
         Count(distinct Test.[Name]) over (partition by Country Country) AS 'Number of Test'
    
    From Test;
    

    或使用 Group By COUNTRY

    的更简单的方法
    select country,Count(distinct Test.[Name]) AS 'Number of Test', SUM(Test.[Number of Manager]) AS 'Number of Parts Staff/Manager' from test
    group by country
    

    【讨论】:

      【解决方案4】:
      SELECT Country,
           SUM(Test.[Number of Manager]) OVER () AS 'Number of Parts Staff/Manager',
           COUNT(Test.[Name]) OVER () AS 'Number of Test'
      FROM Test
      GROUP BY Country
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 2014-07-30
        • 2015-11-03
        • 2015-01-28
        • 2017-03-28
        • 2021-08-21
        • 1970-01-01
        相关资源
        最近更新 更多