|   |   | 
| 
 | Удаление дублей строк | ☑ | ||
|---|---|---|---|---|
| 0
    
        Начинающий Восьмерочн 21.07.17✎ 17:01 | 
        Пытаюсь написать запрос как удалить некий массив строк, на самом деле удаление дублей, никак не могу связать 2 части запроса, там где то INNER JOIN где то должен быть, как сделать подобное ?
 DELETE FROM [dbo].[_InfoRgSL21137] (SELECT [_Fld21123RRef],[_Fld21124RRef],[_Fld21125RRef], SUM(1) FROM [dbo].[_InfoRgSL21137] GROUP BY [_Fld21123RRef],[_Fld21124RRef],[_Fld21125RRef] HAVING SUM(1)>1) | |||
| 1
    
        Ёпрст гуру 21.07.17✎ 17:04 | 
        там где-то where потерялся     | |||
| 2
    
        Ёпрст гуру 21.07.17✎ 17:04 | 
        ну проще писать having count()>1     | |||
| 3
    
        Ёпрст гуру 21.07.17✎ 17:05 | 
        заместо sum(1)     | |||
| 4
    
        Ёпрст гуру 21.07.17✎ 17:06 | 
        Ну и таким запросом, ты удалишь все записи, а не  только "дубли"     | |||
| 5
    
        Ёпрст гуру 21.07.17✎ 17:06 | 
        :)     | |||
| 6
    
        Basilio 21.07.17✎ 17:06 | 
        (4) угу:)     | |||
| 7
    
        Начинающий Восьмерочн 21.07.17✎ 17:07 | 
        Вот я и прошу помощи как связать эти 2 части чтобы удалить только дубли     | |||
| 8
    
        Начинающий Восьмерочн 21.07.17✎ 17:08 | 
        Мне надо удалить строки не по условию вхождения , а именно отобранные 2-й частью запроса, риб в sql из за этого не грузится     | |||
| 9
    
        Генератор 21.07.17✎ 17:09 | 
        возможно что-то типа where (fld1, fld2,fld3) in (select...)     | |||
| 10
    
        Лефмихалыч 21.07.17✎ 17:09 | 
        INSERT INTO #TempTable
 SELECT DISTINCT FROM _InfoRgSL21137 ; truncate table _InfoRgSL21137; insert into _InfoRgSL21137 from #TempTable; drop table #TempTable; | |||
| 11
    
        mistеr 21.07.17✎ 17:09 | 
        (7) Тебе нужно их как-то "рассчитать на первый-второй". Потом удалить только вторые (или первые). Как это делается в скуле, я забыл :(     | |||
| 12
    
        Генератор 21.07.17✎ 17:10 | 
        +(8) нет, он удалит все дубли     | |||
| 13
    
        Лефмихалыч 21.07.17✎ 17:12 | 
        Вообще, автор, ты затеял адскую херню.
 Таблица _InfoRgSL - это итоги. Их бессмысленно корёжить - платформа их делает на основании записей в регистре сама | |||
| 14
    
        Генератор 21.07.17✎ 17:12 | 
        нужно что-то типа оконной функции, которая пронумерует строки в пределах группировки и удалить те строки у которых номер строки не 1     | |||
| 15
    
        Лефмихалыч 21.07.17✎ 17:13 | 
        (8) расскажи подробней, что это значит     | |||
| 16
    
        mistеr 21.07.17✎ 17:14 | 
        (14) Точно, это делается оконной функцией!     | |||
| 17
    
        Генератор 21.07.17✎ 17:15 | 
        (15) я передумал, это не сработает     | |||
| 18
    
        Начинающий Восьмерочн 21.07.17✎ 17:16 | 
        Проблема при постройке индекса, и там есть время между тем как данные уже залиты из dt и будет вызвана процедура построения индекса по измерениям возможно вариант из 10 то что нужно     | |||
| 19
    
        Лефмихалыч 21.07.17✎ 17:16 | 
        нахер все оконные функции. автору надо обменник загрузить. Тупо.     | |||
| 20
    
        Начинающий Восьмерочн 21.07.17✎ 17:19 | 
        (19) Текст из (10) не работает
 Сообщение 156, уровень 15, состояние 1, строка 2 Неправильный синтаксис около ключевого слова "FROM". Сообщение 156, уровень 15, состояние 1, строка 4 Неправильный синтаксис около ключевого слова "from". | |||
| 21
    
        Basilio 21.07.17✎ 17:20 | 
        select t1.id_header, t1.id_department, count(t1.id_header) cnt from doc_detail_exp t1 
 inner join doc_detail_exp t2 on t1.id_header = t2.id_header and t1.id_department = t2.id_department group by t1.id_header, t1.id_department having count(t1.id_header) > 1 Это выборка. Удаление аналогично. | |||
| 22
    
        Лефмихалыч 21.07.17✎ 17:20 | 
        (20) ты реально всё копипастой делаешь?
 Это не готовое решение, его надо было доработать | |||
| 23
    
        Генератор 21.07.17✎ 17:21 | 
        естественно там поля надо перечислить     | |||
| 24
    
        Лефмихалыч 21.07.17✎ 17:21 | 
        (21) это удалит и дубль, и исходную строку     | |||
| 25
    
        mistеr 21.07.17✎ 17:21 | ||||
| 26
    
        Лефмихалыч 21.07.17✎ 17:22 | 
        не надо удалять строки из таблицы итогов регистра. Надо разобраться, почему обменник не грузится и починить причину этого     | |||
| 27
    
        Ёпрст гуру 21.07.17✎ 17:23 | 
        WITH DeleteDouble
 AS ( SELECT _Fld21123RRef,_Fld21124RRef,_Fld21125RRef, row_number() OVER (PARTITION BY _Fld21123RRef,_Fld21124RRef,_Fld21125RRef ORDER BY _Fld21123RRef,_Fld21124RRef,_Fld21125RRef) rn FROM _InfoRgSL21137 ) DELETE FROM DeleteDouble WHERE rn > 1 | |||
| 28
    
        Начинающий Восьмерочн 21.07.17✎ 17:24 | 
        Там строится уникальный индекс по измерениям, тут он понятно не может построится и вылетает.     | |||
| 29
    
        Лефмихалыч 21.07.17✎ 17:24 | 
        Голос разума?.. Не, не слышали...     | |||
| 30
    
        Ёпрст гуру 21.07.17✎ 17:25 | 
        (28) пересчитай итоги     | |||
| 31
    
        Начинающий Восьмерочн 21.07.17✎ 17:26 | 
        (27) Строки удалились те что надо, буду разбираться дальше.     | |||
| 32
    
        Генератор 21.07.17✎ 17:26 | 
        конечно лучше разобраться с причинами, если неохота то оконная функция будет удалять только текущие новые дубли записей, а решение из (10) будет каждый раз пересоздавать всю таблицу итогов     | |||
| 33
    
        Лефмихалыч 21.07.17✎ 17:26 | 
        пля, да в файле обмена дубли в самом регистре, же, ёптить! Автор просто грузит из какой-нить угондошенной файловой в серверную     | |||
| 34
    
        Лефмихалыч 21.07.17✎ 17:27 | 
        серверную не надо лечить, она не больная     | |||
| 35
    
        Начинающий Восьмерочн 21.07.17✎ 17:27 | 
        (29) Это база получатель никто в ней ничего делать не будет, регистр ценыпоставщиковноменклатуры в общем то нафиг не нужный, думаю этим можно пренебречь     | |||
| 36
    
        Лефмихалыч 21.07.17✎ 17:27 | 
        (32) ну, допустим, снесет он записи. Но проблема не в тех записях, которые уже есьт в таблице и котрые он там удалять пытается, а в тех, которые платформа строит на основании данных, полученных из обменника     | |||
| 37
    
        Лефмихалыч 21.07.17✎ 17:28 | 
        ойфсё     | |||
| 38
    
        Генератор 21.07.17✎ 17:29 | 
        (37) я и подразумеваю что это костыль     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |