Группа с учетом регистра SQL By

#sql #sql-server #collation

#sql #sql-сервер #Параметры сортировки

Вопрос:

Вступление

У меня есть таблица, в которой есть столбец «AccountCode» и другие столбцы. Существует несколько одинаковых кодов учетных записей, которые отличаются чувствительностью к регистру. Пример:

 AccountCode   OrderId
ABC           O001
ABC           O002
abc           O003
DEF           O004
  

Цель

Я хочу, чтобы запрос содержал группу по в столбце AccountCode и получал соответствующее количество. Ожидаемый результат должен быть следующим

 ABC      2
abc      1
DEF      1
  

Я пытался использовать COLLATE Latin1_General_CS_AS, но не смог получить желаемый результат.

Приведенный ниже запрос не предоставляет выходные данные с учетом регистра

 select accountCode COLLATE Latin1_General_CS_AS, count(OrderId) 
from <<TableName>> 
group by accountCode
  

Комментарии:

1. group by accountCode COLLATE Latin1_General_CS_AS следует это сделать

2. Вы правы, мне не хватало предложения COLLATE Latin1_General_CS_AS после Group By . Интересно, почему нам нужно определять то же самое в предложении Select и после предложения Group By.

Ответ №1:

Назначьте параметр COLLATE также в предложении GROUP BY

 select accountCode COLLATE Latin1_General_CS_AS, count(OrderId)  
from <<TableName>>  
group by accountCode COLLATE Latin1_General_CS_AS
  

Ответ №2:

 create table #a
(
AccountCode varchar(10)  , OrderId varchar(10)
)
insert into #a values
('ABC','O001'),
('ABC','O002'),
('abc','O003'),
('DEF','O004')

select accountCode COLLATE Latin1_General_CS_AS, count(OrderId) from #a group by accountCode COLLATE Latin1_General_CS_AS
  

Ответ №3:

НАЧНИТЕ С СОЗДАНИЯ ТАБЛИЦЫ #Temp(AccountCode VARCHAR(100),OrderID VARCHAR(100))

ВСТАВИТЬ В #Temp (AccountCode,OrderID) ВЫБЕРИТЕ ‘ABC’, ‘O001’ ОБЪЕДИНИТЬ ВСЕ ВЫБРАННЫЕ ‘ABC’, ‘O002’ ОБЪЕДИНИТЬ ВСЕ ВЫБРАННЫЕ ‘abc’, ‘O003’ ОБЪЕДИНИТЬ ВСЕ ВЫБРАННЫЕ ‘DEF’, ‘O004’

ВЫБЕРИТЕ AccountCode Для СОРТИРОВКИ Latin1_General_CS_AS, COUNT(OrderID) ИЗ #Temp GROUP ПО accountCode ДЛЯ СОРТИРОВКИ Latin1_General_CS_AS

ОТКАТ ТРАН