2013-12-18 8 views
2

У меня есть следующий запрос:INVALID COLUMN? SQL Server 2012

SELECT 
    'button_flag' = CASE 
         WHEN (can_assign_supervisor = 1 AND (SUM(ISNULL(auto_assign_cap, 0) - ISNULL(assigned_today_cap, 0)) > 0)) 
         THEN 1 
         ELSE 0 
        END 
FROM processor 
WHERE prsn_pk = 36381 

Когда я пытаюсь выполнить запрос, я получаю сообщение об ошибке:

Msg 8120, Level 16, State 1, Line 3
Column 'processor.can_assign_supervisor' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Я не ясно, почему эта ошибка происходит.

  • can_assign_supervisor является BIT
  • auto_assign_cap и assigned_today_cap являются ИНТ
  • prsn_pk является первичным ключом

Любые советы?

Спасибо

+1

вы используете SUM() как агрегированную функцию, поэтому вы должны добавить предложение GROUP BY с неагрегированными столбцами. – wxyz

ответ

3

Вы не говорите, что вы хотите сделать,

это будет работать

SELECT 
    'button_flag' = SUM(CASE 
     WHEN (can_assign_supervisor = 1 AND 
      (SUM(ISNULL(auto_assign_cap, 0) - ISNULL(assigned_today_cap, 0)) > 0) 
      ) 
     THEN 1 
     ELSE 0 
     END) 
FROM processor 
GROUP BY prsn_pk, can_assign_superviosor 
WHERE prsn_pk = 36381 

, как это будет:

SELECT 
    'button_flag' = SUM(CASE 
     WHEN (can_assign_supervisor = 1 AND 
      (ISNULL(auto_assign_cap, 0) - ISNULL(assigned_today_cap, 0)) > 0) 
      ) 
     THEN 1 
     ELSE 0 
     END) 
FROM processor 
WHERE prsn_pk = 36381 
+0

да спасибо. Я также переместил can_assign_supervisor в предложение where из инструкции case. медленный мозг. Спасибо – Mildfire