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

Откуда: Екатеринбург
Сообщений: 75
Добрый день всем! такая ситуация что нужно перевести данные из старой БД в новую. Спроектировал БД на принципе реляционных отношений, теперь нужно из одной таблицы разносить по маленьким данные. Сейчас занимаюсь переносом данных об образовании сотрудников, и возникла такая проблема - данные в таблице дублируются, а я в качестве ключевого поля указал номер диплома (состоял из двух полей, которые я благополучно объединил во временной таблице и сконвертировал).

Вот мой запрос:
 use work
go
INSERT INTO testing.dbo.O_OBRAZOVAN
select DISTINCT work.dbo.DIPLOM.DIPL, /*dbo.OSNOV.DIP_N,*/ 1, 1, NAZ_YZ, 1, 1, DAT_O, CONVERT (date, DAT_P, 105), OBR, VID_O, SP_DIP, KVAL 
from dbo.DIPLOM INNER JOIN dbo.OSNOV ON (DIPLOM.DIP_N = OSNOV.DIP_N)
[color=red]where TAB_N NOT LIKE 'со%'[/color]


.DIPLOM.DIPL - хранит полный номер диплома.

дак вот - выводит он мне дублирующие данные т.к. в полях NAZ_YZ одинаковые институты заполнены по разному (пример: МИФИ, Московский Институт ....)

как мне сделать так чтоб он выводил только те поля, которые есть в .DIPLOM.DIPL, чтобы исключить повторения??

Может быть обьединения по другому сделать? красным выделено что я убрал всех совместителей, но теперь записей стало меньше чем полная выборка с дистинктом по полю .DIPLOM.DIPL
26 окт 12, 09:55    [13378466]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
qwerty112
Guest
JesterOK
дак вот - выводит он мне дублирующие данные т.к. в полях NAZ_YZ одинаковые институты заполнены по разному (пример: МИФИ, Московский Институт ....)

дык, преобразуйте, сначала, что бы были одинаковые ... какие ещё варианты ?
26 окт 12, 10:01    [13378498]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
qwerty112
Guest
qwerty112
JesterOK
дак вот - выводит он мне дублирующие данные т.к. в полях NAZ_YZ одинаковые институты заполнены по разному (пример: МИФИ, Московский Институт ....)

дык, преобразуйте, сначала, что бы были одинаковые ... какие ещё варианты ?

или - "без разницы" какое NAZ_YZ выберет для DIPLOM.DIPL ?
тогда
select work.dbo.DIPLOM.DIPL, /*dbo.OSNOV.DIP_N,*/ 1, 1, max(NAZ_YZ), 1, 1, DAT_O, CONVERT (date, DAT_P, 105), OBR, VID_O, SP_DIP, KVAL 
from dbo.DIPLOM INNER JOIN dbo.OSNOV ON (DIPLOM.DIP_N = OSNOV.DIP_N)
group by work.dbo.DIPLOM.DIPL, DAT_O, CONVERT (date, DAT_P, 105), OBR, VID_O, SP_DIP, KVAL
26 окт 12, 10:07    [13378530]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
JesterOK
Member

Откуда: Екатеринбург
Сообщений: 75
qwerty112,

Дело в том что старая БД - это одна большая таблица.. точнее огромная, следовательно:

1) в ручную удалять сложно
2) в будущем так же придется фильтровать совместителей и не совместителей

Так что менять текущую структуру не вариант немного...
26 окт 12, 10:08    [13378544]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
JesterOK
Member

Откуда: Екатеринбург
Сообщений: 75
qwerty112,
Спасибо. Буду пробовать
В принципе желательно полное название, но от неимения других способов думаю устроит и этот, на крайний случай скажу пусть операторы если БД заработает в ручную переименовывают.
26 окт 12, 10:11    [13378565]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
JesterOK
Member

Откуда: Екатеринбург
Сообщений: 75
К сожалению, решение работает, но не полностью. оказывается не в одном поле они различаются.

В общем перефразируя мой вопрос: как сделать так чтобы объединялась только по одному значению, игнорируя дубликаты. Выбор одного из дубликатов не имеет значения, важен факт что значение будет уникальным по одному полю.
26 окт 12, 10:51    [13378753]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
qwerty112
Guest
JesterOK
К сожалению, решение работает, но не полностью. оказывается не в одном поле они различаются.

В общем перефразируя мой вопрос: как сделать так чтобы объединялась только по одному значению, игнорируя дубликаты. Выбор одного из дубликатов не имеет значения, важен факт что значение будет уникальным по одному полю.

select top 1 with ties work.dbo.DIPLOM.DIPL, /*dbo.OSNOV.DIP_N,*/ 1, 1, NAZ_YZ, 1, 1, DAT_O, CONVERT (date, DAT_P, 105), OBR, VID_O, SP_DIP, KVAL 
from dbo.DIPLOM INNER JOIN dbo.OSNOV ON (DIPLOM.DIP_N = OSNOV.DIP_N)
order by row_number() over (partition by work.dbo.DIPLOM.DIPL order by work.dbo.DIPLOM.DIPL)
26 окт 12, 11:10    [13378887]     Ответить | Цитировать Сообщить модератору
 Re: Выборка не повторяющихся полей  [new]
JesterOK
Member

Откуда: Екатеринбург
Сообщений: 75
qwerty112,

Спасибо огромное, количество строк совпадает... буду разбираться дальше
26 окт 12, 11:16    [13378918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить