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

Откуда:
Сообщений: 95
Здравствуйте.

Я занимаюсь одной задачей для выборки дублирующий данных. Но причем, по некоторых полям группировка допускает наличие NULL или пустое значение.
Лучше объясню на примере. Допустим имеется группа, и нужно выбрать ROWNUM для подгруппы дублирующихся данных

Name HomePhone CellPhone Fax
===============================
1 John 111 NULL 333
2 John NULL 222 333
3 John 444 222 333
4 Max 111 222 333

В итоге должна получится выборка таких значений ROWNUM:
Name HomePhone CellPhone Fax ROWNUM
========================================
1 John 111 NULL 333 0
2 John NULL 222 333 1
3 John 444 222 333 0
4 Max 111 222 333 0

Име в наборе данных должно совпадать обязательно, но для других полей допускаются пустые или NULL значения.
Поэтому, 1 и 2 запись должны считаться как значения одного набора, и соответствующие ROWNUM, 3-я запись не совпадает по 1-му дополнительному полю, 4-я запись вообще другое имя.

Как можно произвести такую выборку? Мое предположение, что возможно можно как-то сделать с PARTITION BY, если нет, тогда с группировкой.
27 ноя 13, 12:05    [15197365]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
хмхмхм
Guest
Ankh,

т.е. вам нужно пронумеровать записи в зависимости от значений в полях Name и HomePhone, но при этом значение NULL в HomePhone можно трактовать как какое угодно?
27 ноя 13, 12:13    [15197442]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ankh
Име в наборе данных должно совпадать обязательно, но для других полей допускаются пустые или NULL значения.
Поэтому, 1 и 2 запись должны считаться как значения одного набора, и соответствующие ROWNUM
Почему тогда строки 1 и 2 эквивалентны, а 2 и 3 нет.
27 ноя 13, 12:16    [15197481]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
хмхмхм,

Нет, не совсем так.
Name - основное поле, значения в нем для группы должны совпадать всегда.
HomePhone, CellPhone, Fax - дополнительные поля - если значения в этих полях совпадают, либо в одном есть, но в другом NULL или пустые, то эти члены будут считаться членами одной группы. Не будут считаться они членами одной группы только если значения дополнительных полей не совпадают (запись номер 3, например).
27 ноя 13, 12:17    [15197484]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Добрый Э - Эх
Guest
Ankh, всё же хотелось бы услышать ответ на вопрос от Ruuu:
Ruuu
Почему тогда строки 1 и 2 эквивалентны, а 2 и 3 нет.
27 ноя 13, 14:20    [15198798]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
Добрый Э - Эх,

В предыдущем сообщение есть ответ на этот вопрос.
1 и 2 совпадают, потому что имя совпадает, также Fax совпадает, а у каждого из записей значения HomePhone и CellPhone - NULL, т.е. так как, например, HomePhone у одной из них не указан, можно считать они эквивалентны.
2 и 3 не совпадают, потому что не совпадает HomePhone.
Обязательно для совпадения только Name, остальные могут быть NULL.
27 ноя 13, 14:47    [15199075]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
Добрый Э - Эх,

В предыдущем сообщение есть ответ на этот вопрос.
1 и 2 совпадают, потому что имя совпадает, также Fax совпадает, а у каждой из записей есть значения NULL для полей HomePhone и CellPhone, т.е. так как, например, HomePhone у одной из них не указан, можно считать они эквивалентны.
2 и 3 не совпадают, потому что не совпадает HomePhone.
Обязательно для совпадения только только поле Name, остальные могут быть NULL.
27 ноя 13, 14:49    [15199104]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Добрый Э - Эх
Guest
Ankh,

ну как же 2 и 3 не совпадают-то?
Что у 2, что у 3 - name одинаков, значит они в рамках одной группы.
Что у 2, что у 3 - CellPhone одинаков
Что у 2, что у 3 - Fax одинаков
Различаются только по HomePhone , но так как у 2 оно NULL, а у 3 оно - 444, то строки совпадают.
Всё в точности с описанной тобой логикой.

И тут уж два варианта: либо 2 и 3 совпадают, либо описанная тобой логика - не соответствует действительности.
27 ноя 13, 14:59    [15199222]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
Добрый Э - Эх,

Уважаемый, не понимаете не пишите.
27 ноя 13, 15:01    [15199247]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
Добрый Э - Эх,

Пока Вы тут троллингом занимаетесь я сам нашел решение.
27 ноя 13, 15:02    [15199254]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Добрый Э - Эх
Guest
Ankh
Добрый Э - Эх,

Уважаемый, не понимаете не пишите.
Ну так научись изъясняться так, чтобы тебя понимали. Я смотрю - понявших-то, кроме тебя, никого и нет.
27 ноя 13, 15:04    [15199282]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

Откуда:
Сообщений: 95
Добрый Э - Эх,

Задача тоже непростая для понимания.
27 ноя 13, 15:06    [15199306]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Новые веянья на форуме – «угадай вопрос, напиши правильный ответ, и за это тебя может быть не обхамят»
27 ноя 13, 15:39    [15199672]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

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

Да, форум уже не торт.
27 ноя 13, 15:55    [15199829]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ankh
Добрый Э - Эх,
Уважаемый, не понимаете не пишите.
А зачем вы тогда свой поток сознания на нас изливаете? Запишите его в блокнотике, и никто вас ничего спрашивать не будет.
Ankh
Пока Вы тут троллингом занимаетесь я сам нашел решение.
Поздравляю. На задачу, которая решается от силы пятнадцать минут, у вас ушло пять часов.
А всё от того, что вы не хотите читать и понимать, что вам пишут. Прежде всего это касается правил форума.
27 ноя 13, 16:44    [15200300]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY или PARTITION BY с опциональной группировкой по пустому значению  [new]
Ankh
Member

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

Про 15 минут Вы с чего взяли? Вы же не поняли в чем была ее, как Вы могли оценить.
27 ноя 13, 16:50    [15200364]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить