#sql #sql-server
#sql #sql-сервер
Вопрос:
Это мой запрос и моя цель — суммировать 2 или более столбцов
SELECT field, sum(cnt)
FROM (
SELECT column1 as field, count(*) as cnt
FROM table
GROUP BY column1
UNION ALL
SELECT column2 as field, count(*) as cnt
FROM table
GROUP BY column2
order by field asc
)
GROUP BY field
ORDER BY sum(cnt) DESC
Я получил ошибку, и кто-то может увидеть неправильную строку. Спасибо.
Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и общих табличных выражениях, если также не указаны TOP, OFFSET или FOR XML.
Комментарии:
1. Удалите
order by
.
Ответ №1:
Ваш запрос было бы проще выразить как:
select v.field, count(*)
from t cross apply
(values (column1), (column2)) v(field)
group by v.field
order by count(*) desc;
Это также, вероятно, будет иметь лучшую производительность.
Примечание: Как я уже сказал в своем комментарии, ваша версия будет работать, если вы просто удалите order by
in подзапрос.
Комментарии:
1. Отличная работа. Но я все еще хочу знать, почему мой запрос не работает? Я действительно удалил порядок, все еще получая ошибку
2. @qphan Потому что предложение внутреннего порядка по синтаксически недопустимо. Я бы сослался на имя производной таблицы в вашем запросе, но оно отсутствует — еще одна синтаксическая ошибка.