2013-03-18 4 views
1

У меня есть webapp, который использует DataTables с обработкой на стороне сервера. У меня есть несколько запросов SQL, которые произвольно группируют данные в столбцах, так что я получаю запросы как это:Столбец Unkown с предложением UPPER в HAVING для псевдонима столбца

SELECT case `column` 
WHEN 'value1' then 'group1' 
WHEN 'value2' then 'group1' 
ELSE `column` END AS `column grouped`, SUM(`2010`) 
GROUP BY `colonne grouped` 

Теперь я добавляю некоторую фильтрацию на основе пользовательского ввода, и я так:

SELECT case `column` 
WHEN 'value1' then 'group1' 
WHEN 'value2' then 'group1' 
ELSE `column` END AS `column grouped`, SUM(`2010`) 
GROUP BY `column grouped` 
HAVING `column grouped` LIKE '%test%' 

и он по-прежнему работает нормально, но мои беды приходят, когда я пытаюсь сделать все это дело Инсентив, и поэтому я:

SELECT case `column` 
WHEN 'value1' then 'group1' 
WHEN 'value2' then 'group1' 
ELSE `column` END AS `column grouped`, SUM(`2010`) 
GROUP BY `colonne grouped` 
HAVING UPPER(`column grouped`) LIKE '%test%' 

и теперь я получаю «# 1054 - Неизвестный столбец„столбец сгруппированы“в" с предложением "

В качестве временного решения, я что-то вроде этого:

SELECT case `column` 
WHEN 'value1' then 'group1' 
WHEN 'value2' then 'group1' 
ELSE `column` END AS `column grouped` , SUM(`2010`) 
GROUP BY `colonne grouped` 
HAVING UPPER(case `column` 
WHEN 'value1' then 'group1' 
WHEN 'value2' then 'group1' 
ELSE `column` END) LIKE '%test%' 

Но это не очень удобно. Кто-нибудь знает, почему я не могу использовать UPPER с пользовательским псевдонимом?

Я использую MySQL 5.5.

+0

вы пытались поставить UPPER на колонку и не так? – rbedger

ответ

0

По docs вы не можете использовать функции в предложении HAVING:

SQL, стандарт требует, чтобы HAVING должно ссылаться только на столбцы в в предложения GROUP BY или столбцов, используемых в агрегатных функциях. Однако MySQL поддерживает расширение для этого поведения и позволяет HAVING ссылаться на столбцы в списке SELECT и столбцах во внешних подзапросах как .

Вы ограничены только теми столбцами, которые вы уже получили. Я не знаю, есть ли техническая причина, но это то, что требует стандарт SQL.

+0

Спасибо, это имеет смысл, хотя ошибка запутанна. Теперь забавная часть заключается в том, что если я использую HAVING UPPER (CASE xxx WHEN yy then zz), он полностью работает. – bmigette

+0

Хммм ... Если это сработает, тогда мой ответ неправильный, не так ли? : -? –

0

пытаются сделать UPPER в WHERE п

 SELECT case `column` 
    WHEN 'value1' then 'group1' 
    WHEN 'value2' then 'group1' 
    ELSE `column` END AS `column grouped`, SUM(`2010`) 
    WHERE UPPER(`column grouped`) LIKE '%test%' 
    GROUP BY `colonne grouped` 
+0

О, я думал, что должен был использовать при использовании группы, но похоже, что мне просто нужно это для столбцов, я использую математическую функцию с ... Спасибо! – bmigette

+1

Здравствуйте, Это не помогает, поскольку столбец 'colonne grouped' фактически не существует. – bmigette

+0

u смешно :), вы использовали 'colonne grouped' в вашем примере, но, конечно, вы можете изменить его на свой столбец, который я ответил, как вы написали, –

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