Я использую SQL Server 2008 и использую очень большой оператор CASE, который также используется в предложении GROUP By. Я хотел бы установить оператор CASE для переменной, чтобы минимизировать обслуживание кода и максимизировать повторное использование. Проблема в том, что я получаю такую ошибку:
Each GROUP BY expression must contain at least one column that is not an outer reference.
Этот столбец CASED - не единственный столбец, на который есть ссылка в предложении GROUP By, поэтому я не уверен, почему я получаю эту ошибку.
Я искал на сайте, но не нашел проблемы, похожей на мою (что удивительно). Итак, как мне обойти это?
ОБНОВЛЕНИЕ: я включил тип БД. Что касается добавления кода для того, что у меня есть, я не уверен, что добавит что-нибудь, кроме большого объема, поскольку это более 200 строк. Это совсем не сложное утверждение. Он просто берет различные коды стран и сопоставляет их с их полными названиями стран. Например, в США более 50 кодов, поэтому я использую оператор CASE для их объединения. Это позволяет мне сгруппировать информацию по странам.
1 ответ
Лучше всего это сделать с помощью подзапроса:
select var, count(*)
from (select t.*,
(case <nasty expressions go here>
end) var
from t
) t
group by var
Вы получаете ошибку, потому что переменные в group by
являются константами. Я не уверен, почему сообщение об ошибке не яснее.
И, если вы действительно хотите включить константу в group by
по какой-то причине (как мне приходилось делать), тогда помогает столбец:
group by (case when coalesce(col, '') = coalesce(col, '') then 'some constant' end)
По крайней мере, в SQL Server 2008 механизм не распознает выражение как константу.
case
основана на одной таблице, вас могут заинтересовать вычисляемые столбцы (msdn.microsoft.com/en-us/library/ms191250 (v = sql.105) .aspx). В качестве альтернативы создайте представление и используйте его во всей своей логике.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.