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

Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,tsql,window-functions,Sql,Sql Server,Tsql,Window Functions,我有下面的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' EL

我有下面的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”在select中无效 列表,因为它不包含在 聚合函数或 按子句分组


当使用诸如max之类的聚合时,只能使用属于group by子句的字段

所以,如果希望其他字段将它们添加到GROUPBY子句中,请去掉“*”

您有用于聚合的MAX,因此需要按Id分组 …这将不起作用,因为您有行号 您真的想要地板和用户之间的笛卡尔积交叉连接吗? 哪个列属于哪个表? 也许这有助于您实现目标:

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

您正在显示整个查询吗?我想其中id=userid是连接条件。id是楼层用户id。我没有键入它,它应该是'floorusrId'SELECT*从按FloorUserId排序的行中选择为'row\u number',FloorUserId,当AreaId='[G]'或AreaId=N'L01'时为maxCASE,然后'X'ELSE'结束为'L01',当AreaId='[G]时为maxCASE]'或AreaId=N'L02'然后'X'ELSE''从floor结束为'L02',tbuser where floor.FloorUserId=tbuser.userID作为derivedTable,其中行号介于1和20之间