AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.08.2008, 14:57   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Отсеять дублирующиеся по определенному полю рекорд
Можно ли в один запрос сделать это? Смотрел в сторону notexist join в вайл селекте, но так пропадут и те рекорды, у которых есть дубликаты, а мне надо одобрать все уникальные значения, то есть из набора:

1
3
5
5
1
2

Результат должен получиться: 1352, в случае же с notexist join только 32.
И вообще, жаль, что в Аксапте нет дистинкта, так что возможно прийдется выполнять из строки.
__________________
Axapta has seduced me deadly!
Старый 06.08.2008, 15:04   #2  
Hub is offline
Hub
Участник
 
51 / 10 (1) +
Регистрация: 20.05.2008
Через джоин и группировку?
Старый 06.08.2008, 15:10   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
X++:
while select table
     group by field
или вы хотите, чтобы в запросе все поля были потом? Тогда какую запись надо оставлять, если есть совпадения, и какой в этом смысл, если любую?
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.08.2008, 15:12   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Без джойна. Просто группировка. Разумеется, если кроме этого поля больше ничего не надо.

Хотя стандартное решение - это сортировка по указанному полю с сохранением значения предыдущей записи в переменной.

X++:
int prevValue = (   );

while select MyTable order by MyField
{
	if (prevValue == MyTable.MyField)
	{
		// дубль. Беру следующую запись
		continue;
	}

	// Обновляю значение переменной
	prevValue == MyTable.MyField

	// собственно цикла
	...
}
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.08.2008, 15:13   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не до конца понял условие задачи. Ответ удалил

Последний раз редактировалось kashperuk; 06.08.2008 в 15:17.
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.08.2008, 15:17   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
X++:
select from table1 notexistjoin table2 where table1.field1 == table2.field1 && table1.RecId != table2.RecId
Это если надо всю информацию из отобранных записей получить.
Только надо условие писать или только меньше или только больше

table1.RecId < table2.RecId

Поскольку условие на не равно выбросит вообще любые записи имеющие дубли. Ни одной не останется.
Старый 06.08.2008, 15:19   #7  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ого, как много успели наотвечать, вот за что и люблю сей светлый портал, спасибо всем большое. Я уже разорбрался, так как меня интересует только одно поле, сделал простую группировку, и очень рад, что вы, господа, предложили тот же способ, значит я не совсем безнадежен)))
__________________
Axapta has seduced me deadly!
Старый 06.08.2008, 15:20   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да, через
X++:
select from table1 notexistjoin table2 where table1.field1 == table2.field1 && table1.RecId < table2.RecId
вроде должно работать.
Старый 06.08.2008, 15:24   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Да, кстати, способ с поправкой Владимира Максимова очень изящен в случае, если надо потом иметь все данные. Так сказать, в мемориз)
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 06.08.2008 в 15:28.
Старый 06.08.2008, 15:31   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
вроде должно работать.
Да, но расскажи мне смысл такой выборки? Почему из повторяющихся записей мы выбираем ту, у которой reсId больше, а не меньше? Если все равно, какую выбирать, то какой в этом может быть смысл? Мы генератор случайных чисел пишем? Или имеется в виду, что значения остальных "важных" полей у таких записей совпадают? Но в этом случае структура БД неоптимальна. Или можно еще и по этим полям сгрупировать тоже.
Теги
distinct

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно сделать lookup по полю типа Base Enum? Hidden DAX: Программирование 25 04.10.2017 13:06
Range по Display полю Андрей К. DAX: Программирование 2 15.08.2007 21:39
Можно ли в одном select`e получить maxof и minof по одному полю? ArturK DAX: Программирование 2 28.04.2004 12:28
Поиск по полю временной таблицы Swetik DAX: Программирование 2 10.12.2003 11:35
Обращение к полю таблицы Андре DAX: Программирование 7 31.01.2002 11:59

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:53.