【问题标题】:Error in TSQL aggregate errorTSQL 聚合错误中的错误
【发布时间】:2015-04-30 14:55:19
【问题描述】:

我想统计一个项目中etape一个Employee工作的数量

我的餐桌临时工是:

时间:

noProjet
noEtape
noEmploye
annee
mois
jrsHm

我的查询是

select 
    t.noEmploye, t.NoProjet, c.count
from 
    temps t
inner join 
    (select 
         noProjet, noEtape, count(*) as count
     from 
         temps
     group by 
         noProjet) c on t.noProjet = c.noProjet
order by 
    noEmploye

我得到的错误是

消息 8120,第 16 级,状态 1,第 1 行
列“temps.noEtape”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    错误是不言自明的。从子查询中删除 noEtape 列。如果列不在组列表中,除非您对该列应用一些聚合,否则您无法选择它:

    select t.noEmploye, t.NoProjet, c.count
    from temps t
    
    inner join (select noProjet, count(*) as count
    from temps
    
    group by noProjet ) c on t.noProjet = c.noProjet
    order by noEmploye
    

    或者:

    select t.noEmploye, t.NoProjet, c.count
    from temps t
    
    inner join (select noProjet, max(noEtape) as noEtape, count(*) as count
    from temps
    
    group by noProjet ) c on t.noProjet = c.noProjet
    order by noEmploye
    

    【讨论】:

    • 把员工的工作“带”到项目中来算不算好事
    【解决方案2】:

    这是你想要的吗?

    select distinct
      noEmploye,
      noProjet,
      sum(noEtape) over (
        partition by noProjet
      ) as EtapesdeProjet
    from Temps
    order by noEmploye
    

    【讨论】:

      【解决方案3】:

      也许您可以使用下一个查询来做到这一点:

      select 
          t.noEmploye, 
          t.NoProjet, 
          c.count
      from temps t
          inner join (select noProjet, noEtape, count(*) as count from temps group by noProjet, noEtape) as c 
              on t.noProjet = c.noProjet
      order by noEmploye
      

      【讨论】:

      • Msg 207,级别 16,状态 1,第 7 行无效的列名称“noProjet”。在 c.noProjet 上
      • 我修正了查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      相关资源
      最近更新 更多