Количество столбцов суммы SQL 2 или более

#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 Потому что предложение внутреннего порядка по синтаксически недопустимо. Я бы сослался на имя производной таблицы в вашем запросе, но оно отсутствует — еще одна синтаксическая ошибка.