Member 10038070 Ответов: 1

Выберите имя, сумму (зарплату) в качестве зарплаты, сумму (случай, когда convert(varchar(30), зарплата, 1) > '25000' затем 'YES' ELSE 'NO' END) в качестве бонуса от группы сотрудников по имени, зарплате


SELECT Name,SUM(salary) AS salary ,SUM(CASE  WHEN convert(varchar(30),salary,1) >'25000' THEN 'YES' ELSE 'NO' END) AS
BONUS FROM EMPLOYEE GROUP BY NAME,salary


Я использую вышеописанный запрос для получения имени, суммы зарплаты, а также хочу напечатать Да, когда зарплата больше 20000 и нет, когда зарплата меньше 20000 .

примечание: если один и тот же сотрудник получает двукратную зарплату, то имя будет отображаться только один раз с общей суммой двухкратной зарплаты .

Что я уже пробовал:

Operand data type varchar is invalid for sum operator.



<pre>SELECT Name,SUM(salary) AS salary ,SUM(CASE  WHEN convert(varchar(30),salary,1) >'25000' THEN 'YES' ELSE 'NO' END) AS
BONUS FROM EMPLOYEE GROUP BY NAME,salary


Я использую вышеописанный запрос для получения имени, суммы зарплаты, а также хочу напечатать Да, когда зарплата больше 20000 и нет, когда зарплата меньше 20000 .

примечание: если один и тот же сотрудник получает двукратную зарплату, то имя будет отображаться только один раз с общей суммой заработной платы за время буксировки .

José Amílcar Casimiro

Как вы думаете, имеет ли смысл суммировать " да " и "нет"? Кроме того, у вас есть проблема с group by.

1 Ответов

Рейтинг:
0

OriginalGriff

Вы не можете добавить строки: Если я вырежу другие биты, будет более очевидно, что вы сделали:

SELECT ... ,SUM(CASE WHEN ... THEN 'YES' ELSE 'NO' END) AS BONUS ...
Вы пытаетесь суммировать ряд строк" да "и" нет", которые просто не будут работать: функция SUM ожидает числовое значение. Вероятно, то, что вы хотите сделать, - это объединить ваши сгруппированные данные и добавить к ним информацию, но я подозреваю, что в вашем предложении GROUP BY также перечислено слишком много столбцов. Я думаю, что вам, вероятно, нужно переосмыслить то, что вы пытаетесь сделать, поскольку это выглядит как бит "бросьте его вместе и надейтесь", а не как рассматриваемый SQL-код.

Чтобы добавить к этому, почему вы преобразуете числовое значение в строку, а затем пытаетесь сравнить его с числом в строке? Сравнение строк выполняется символ за символом, причем результат всего сравнения определяется первым другим символом. Таким образом, " 3 "больше, чем "25000", а "100000000" меньше, чем "25000".
Всегда сравнивайте числа как числа!