Чтобы получить количество строк, связанных с каждым значением myNumber
, канавы DISTINCT
и использовать GROUP BY
вместо этого.
Наиболее простой пример, повторить выражение в списке выбора в GROUP BY предложения:
SELECT [A_number] + '-' + CONVERT(VARCHAR(10),[zone]) AS myNumber
, COUNT(*) AS cnt
FROM [dbo].[soils]
GROUP
BY [A_number] + '-' + CONVERT(VARCHAR(10),[zone])
Для тривиальных наборов, производительность не будет проблемой. Для больших наборов производительность может пострадать. Решение состоит в том, чтобы переработать запрос, чтобы воспользоваться существующими индексами или добавить соответствующие индексы.
Выполнение группы по горизонтальным столбцам - это нормативный шаблон. Это позволяет использовать подходящий индекс. Без предложения WHERE лучшая ставка для оптимального индекса для этого запроса имела бы ведущие столбцы '(A_number, zone)'. +10. Существует край, где этот запрос возвращает другой результат из оригинала. Рассмотрим строки с '(A_number, zone)' значениями '('1 -', 'a')' и '('1', '- a')'. – spencer7593