Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL 2000 DISTINT и пробел в конце значения  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Добрый день знатоки. Подскажите как бы вылечит следующую проблему:
В результате запроса предполагаю получить 4 значения
Select DISTINCT * from (
Select '1 ' as col
UNION ALL
Select '1'
UNION ALL
Select '2'
UNION ALL
Select ' 2'
) t2

А получаю 3
col
 2
1 
2

(3 row(s) affected)


Как это он так ловко обьединил "1" и "1 " и почему вывел именно "1 "?
15 окт 14, 15:25    [16708077]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
_Groxot_,

хвостовые пробелы при сравнении (а GROUP BY и DISTINCT включа.т в себя сравнение) удаляются.
По-простому не лечится. Можно добавить справа ещё какой-нибудь разделитель.
Кстати, напишите везде просто UNION, и DISTINCT не понадобится.
А во внешнем SELECTе отсечь эти правые разделители.
15 окт 14, 15:31    [16708146]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
iap,

У меня запрос сначала выбирает общие части, а потом по ним ищет вхождения.

Т.е. я создаю таблицу группировки в которую попадает столбец col, а затем снова бегу по целевой таблице и выбираю все строки которые подходят под эту группировку. Но, вот тут самое интересное: DISTINCT '1 ' и '1' дает '1 ', a LIKE (которым я сравниваю таблицу группировки с целевой) '1 ' и '1' соответствия не находит =(
15 окт 14, 15:37    [16708211]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
_Groxot_
iap,

У меня запрос сначала выбирает общие части, а потом по ним ищет вхождения.

Т.е. я создаю таблицу группировки в которую попадает столбец col, а затем снова бегу по целевой таблице и выбираю все строки которые подходят под эту группировку. Но, вот тут самое интересное: DISTINCT '1 ' и '1' дает '1 ', a LIKE (которым я сравниваю таблицу группировки с целевой) '1 ' и '1' соответствия не находит =(


что-то вы не то написали
15 окт 14, 15:56    [16708374]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Winnipuh,

)) Возможно.

Имеется таблица из 6 полей.
Необходимо вернуть все уникальные записи по первым пяти столбцам, а в шестой записать значения через запятую из столбца 6, всех совпавших строк.

Т.е.

'1','0','1','0','1','Q'
'1','0','1','0','1','W'


Должно показать
'1','0','1','0','1','Q,W'
15 окт 14, 16:02    [16708428]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
iiyama
Member

Откуда:
Сообщений: 642
_Groxot_,

Вы в прошлом году задавали уже такой вопрос
Вас направили сюда Пример A
15 окт 14, 17:20    [16709126]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
iiyama,

Отлично. Только я пишу по поводу того, что DISTINCT не работает должным образом!
16 окт 14, 08:41    [16711579]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
_Groxot_
Только я пишу по поводу того, что DISTINCT не работает должным образом!
Как должен работать DISTINCT - вам написали: "хвостовые пробелы при сравнении (а GROUP BY и DISTINCT включают в себя сравнение) удаляются.", у вас так и радотает, как должен.

Как изменить это поведение - тоже написали: "Можно добавить справа ещё какой-нибудь разделитель."
16 окт 14, 08:56    [16711625]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2000 DISTINT и пробел в конце значения  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
alexeyvg,

Я немного почитал, решено заменить "LIKE" на "=". Т.к. LIKE это единственный оператор сравнения, который учитывает оконечные пробелы.
16 окт 14, 09:03    [16711641]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить