当前位置: 首页 > 知识库问答 >
问题:

select列表中的列无效,因为它不包含在聚合函数或GROUP BY子句中

师建德
2023-03-14

我们有一个表,它将捕获每个雇员的刷卡记录。我正在尝试编写一个查询,以获取今天第一次刷取的非重复员工记录列表。

我们正在datetime列中保存刷卡日期信息。下面是我的查询,它抛出异常。

 select distinct 
    [employee number], [Employee First Name]
    ,[Employee Last Name]
    ,min([DateTime])
    ,[Card Number]
    ,[Reader Name]
    ,[Status]
    ,[Location] 
from 
    [Interface].[dbo].[VwEmpSwipeDetail] 
group by  
    [employee number] 
where 
    [datetime] = CURDATE();

获取错误:

列“interface.dbo.vwempSwipeDetail.Employee First Name”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

有什么需要帮忙的吗?

提前道谢。

共有1个答案

周越泽
2023-03-14

这个错误说明了一切:

...Employee First Name“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

话说回来,还有其他栏目也需要注意。

将返回的列减少到只需要的列,或者将列包含在group by子句中,或者添加聚合函数(min/max)。此外,您的where子句应放在组by之前。

尝试:

select   distinct [employee number]
      ,[Employee First Name]
      ,[Employee Last Name]
      ,min([DateTime])
      ,[Card Number]
      ,min([Reader Name])
from [Interface].[dbo].[VwEmpSwipeDetail] 
where CAST([datetime] AS DATE)=CAST(GETDATE() AS DATE)
group by  [employee number], [Employee First Name], [Employee Last Name], [Card Number]

我删除了statuslocation,因为这可能返回非区分值。为了返回该数据,您可能需要一个子查询(或CTE),它首先获取SwipeDetails表的唯一ID,然后您可以从该列表连接到其他数据,如下所示:

SELECT [employee number],[Employee First Name],[Employee Last Name].. -- other columns
FROM [YOUR_TABLE]
WHERE SwipeDetailID IN (SELECT MIN(SwipeDetailsId) as SwipeId
                        FROM SwipeDetailTable
                        WHERE CAST([datetime] AS DATE)=CAST(GETDATE() AS DATE)
                        GROUP BY [employee number])
 类似资料: