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

标签 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' ELSE ' ' END) as 'L02'
from floor, tbuser where FloorUserId= tbuser.userID  
    )  as derivedTable where row_number BETWEEN 1 AND 20

但我不断收到以下错误:

Column 'FloorId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

最佳答案

  • 您有用于聚合的 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

关于sql - 列在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5114112/

相关文章:

php - mySQL 查询——多个可能的特定值

asp.net - 将数据库项目导出为 SQL 脚本

sql-server - 确定 T-SQL 中 SP 参数是否具有默认值

sql - TSQL:两个选择的联合结果(过程?)

php 无法连接到 sql server 2008(使用 pdo dblib)

mysql - 如何在另一个表中以特定模式显示一个表的数据

sql - 将多行转为单行

sql - Oracle中如何选择一个变量的值?

mysql - SQL 选择仅包含特殊字符的值

sql - T-SQL 行号在 N 后重新启动