#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
ОТКАТ ТРАН