У меня есть запрос, который ' s выбирает группу полей, связанных с именами и адресами клиентов, но сводится к следующему:
SELECT DISTINCT a, b, c, ... FROM big_dumb_flat_table
возвращает группу записей (10986590). Когда я заменяю запятые в списке выбора, чтобы отформатировать их как конкатенированную строку, разделенную конвейером:
SELECT DISTINCT a + '|' + b + '|' + c + '|' + ... FROM big_dumb_flat_table
он возвращает еще 248 записей. Я заверил себя, что ни в одном из полей нет труб, которые могли бы повлиять на точность возвращаемого набора. Что здесь происходит?
Конечные пробелы могли вызвать это. При сравнении строк они игнорируются.
CREATE TABLE #T
(
a varchar(10),
b varchar(10),
c varchar(10)
)
INSERT INTO #T
SELECT 'a ' as a, 'b' as b, 'c ' as c union all
SELECT 'a' as a, 'b' as b, 'c ' as c
SELECT DISTINCT a, b, c
FROM #T /*1 result*/
SELECT DISTINCT a + '|' + b + '|' + c + '|'
FROM #T /*2 results*/
SELECT DISTINCT LTRIM(RTRIM(a)) + '|' + LTRIM(RTRIM(b)) + '|' +
LTRIM(RTRIM(c)) + '|'
FROM #T /*1 result*/
На самом деле я не могу придумать ни одного сценария, который дал бы вам БОЛЬШЕ записей, только меньше. Я бы упростил запрос, выбрав только + '|', а затем добавлял больше столбцов по мере продвижения.