繁体   English   中英

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

[英]Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

我有下面的SQL查询,但我执行它时遇到问题。

SELECT * from (Select row_number() OVER(Order By FloorUserId) as 'row_number', FloorUserId,
max(CASE WHEN AreaId='[G]' or AreaId=N'L01'  THEN 'X' ELSE ' ' END) as 'L01',
max(CASE WHEN AreaId='[G]' or AreaId=N'L02'  THEN 'X' ELSE ' ' END) as 'L02'
from floor, tbuser where FloorUserId= tbuser.userID  
    )  as derivedTable where row_number BETWEEN 1 AND 20

但我不断收到以下错误:

列'FloorId'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

  • 你有MAX用于聚合,所以你需要GROUP BY Id
  • ...这不会起作用,因为你有ROW_NUMBER
  • 你真的想在地板和用户之间使用笛卡尔积(CROSS JOIN)吗?
  • 什么列属于哪个表?

也许这可以帮助你到达你想要的地方:

Select
     row_number() OVER (PARTITION BY userid Order By user.Id) as 'row_number', user.Id,
     max(CASE WHEN  floor.AreaId='[G]' or  floor.AreaId=N'L01'  THEN 'X' ELSE ' ' END) as 'L01',
     max(CASE WHEN floor. AreaId='[G]' or  floor.AreaId=N'L02'  THEN 'X' ELSE ' ' END) as 'L02'
from
    floor
    JOIN
    user ON floor. = user.    --what?
where
    user.Id = userID 
group by
    user.Id

使用聚合(如max)时,只能使用属于group by子句的字段。

因此,如果您希望其他字段将它们添加到group by子句中,请删除“*”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM