|
v7: Поиск одинаковых элементов справочника
| ☑ |
0
slimuz
20.07.18
✎
08:37
|
Добрый день.
Подскажите как сравнить коды одного справочника для вывода в отчет одинаковых кодов (дубли)?
|
|
1
1Сергей
20.07.18
✎
08:43
|
вариантов куча. начиная от перебора и заканчивая покупкой готового решения на нимфостарте
|
|
2
Мандалай
20.07.18
✎
08:46
|
А запросом получить и сгруппировать по коду?
Или 77 так не умеет?
|
|
3
1Сергей
20.07.18
✎
08:47
|
(2) Умеет, вроде.
|
|
4
slimuz
20.07.18
✎
08:56
|
(2) Запросом, но мне нужно чтоб код был урезан до 8 символов (Формат(код, "С8") перед сравнением
|
|
5
Ёпрст
20.07.18
✎
09:11
|
(0)
select * from $Справочник.Нужный
where left(code,8) in (select left(code,8) from $Справочник.Нужный group by left(code,8) having count(*)>2)
|
|
6
Djelf
20.07.18
✎
21:10
|
А... ерунда... попробуйте
ТекстЗапроса="
|SELECT
| id [Номенклатура $Справочник.Номенклатура]
| ,code
| ,code8
| ,count
|FROM ( SELECT
| id
| ,code
| ,substr(code,1,8) as code8
| ,count(*) OVER (PARTITION BY substr(code,1,8)) as count
|FROM Справочник_Номенклатура
|)
|";
База=СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
Запрос=База.НовыйЗапрос();
итДанные=СоздатьОбъект("ИндексированнаяТаблица");
Запрос.ВыполнитьЗапрос(ТекстЗапроса,итДанные);
|
|
7
Djelf
20.07.18
✎
21:13
|
Зачем нужен OVER и PARTITION я понимаю, но как то не очень применил. Эта ситуация применима.
|
|
8
Djelf
20.07.18
✎
21:14
|
Решение в (5) будет тормозить жестоко.
|
|
9
Djelf
20.07.18
✎
21:23
|
(0) Если нет понимания зачем так и почему, это лучше делать перебором.
Возможно и после понимания "будет не быстрее", это зависит от конкретной ситуации.
|
|
10
Злопчинский
20.07.18
✎
23:46
|
Главное - попасть в перебор
|
|