2015-03-10 3 views
0

Я пытаюсь настроить следующее заявление:SQL вопрос с футляром даного

SELECT CASE WHEN OrganizationLevel < 2 THEN UPPER(JobTitle) 
        ELSE JobTitle END as 'Job Title', COUNT(BusinessEntityID) as 'number of employees' 
    FROM HumanResources.Employee 
    WHERE OrganizationLevel < 3 
    GROUP BY JobTitle, OrganizationLevel 
    ORDER BY JobTitle ASC 

мне нужно изменить его таким образом, чтобы сделать JobTitle обозначаться как «Something Else», когда OrganisationLevel равен 1.

Я думал, что это было бы простым делом сделать небольшое изменение в заявлении CASE, так JobTitle будет = «ИНОЕ», но это не позволит мне сделать это,

Любая помощь очень ценится

+2

Вы получаете ошибку о группе? У вас должен быть такой же оператор в группе, как у вас в группе выбора –

+0

, не дает мне ошибку, как это работает, но мне нужно, чтобы он показывал JobTitle как «что-то еще», когда уровень организации = 1 –

+0

Oh then может быть, проблема в том, что у вас есть <2 первый, поэтому он использует это вместо = 1? –

ответ

0

Вы должны иметь такой же case заявление в Group by

SELECT CASE 
     WHEN OrganizationLevel = 1 THEN 'SOMETHING_ELSE' 
     WHEN OrganizationLevel < 2 THEN Upper(JobTitle) 
     ELSE JobTitle 
     END      AS 'Job Title', 
     Count(BusinessEntityID) AS 'number of employees' 
FROM HumanResources.Employee 
WHERE OrganizationLevel < 3 
GROUP BY JobTitle, 
      CASE 
      WHEN OrganizationLevel = 1 THEN 'SOMETHING_ELSE' 
      WHEN OrganizationLevel < 2 THEN Upper(JobTitle) 
      ELSE JobTitle 
      END 
ORDER BY JobTitle ASC 
+0

закрыть, но оно вызывает ошибку: столбец «HumanResources.Employee.OrganizationLevel» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. –

+0

Это решило его, проигнорировав предыдущий комментарий, спасибо –

0
SELECT CASE WHEN OrganizationLevel < 2 THEN UPPER(JobTitle) 
        ELSE WHEN OrganizationLevel =1 THEN 'SOMETHING ELSE' ELSE JobTitle END as 'Job Title', COUNT(BusinessEntityID) as 'number of employees' 
    FROM HumanResources.Employee 
    WHERE OrganizationLevel < 3 
    GROUP BY JobTitle, OrganizationLevel 
    ORDER BY JobTitle ASC 
+0

«Something Else» никогда не будет возвращен, потому что 1 <2. –

+0

Я мог бы удалить <2, поскольку это не будет необходимо, если я прав, но это не решает проблему –

+0

Исправить. Но это было просто для иллюстрации того, как установить дополнительное условие в CASE. – SouravA

Смежные вопросы