5

我在下面有 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 子句中。

4

2 回答 2

3
  • 您有 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
于 2011-02-25T06:01:58.617 回答
0

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

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

于 2011-02-25T05:59:44.260 回答