Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY - PullRequest
5 голосов
/ 25 февраля 2011

У меня есть 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пункт.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011
  • У вас есть 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
0 голосов
/ 25 февраля 2011

Вы можете использовать только поля, входящие в состав предложения group by, когда вы используете агрегаты (например, max).

Так что избавьтесь от '*', если хотите, чтобы другие поля добавляли их в предложение group by.

...