SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.07.2020 18:17:04

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Дополнение кодов

Прошу помочь решить задачу.
Есть таблица с кодами - 10 знаков.
Эти коды условно разбиты на шесть разрядов. Первые два разряда по одному знаку, остальные по 2 знака.

Задача дополнить таблицу недостающими кодами в разрядах.
Например, есть коды
000200000
020000005

Нужно автоматически сгенерировать недостающие коды для каждого разряда. итого должно получиться:
000000000
000100000
000200000
010000000
020000000
020000001
020000002
020000003
020000004
020000005

Создал такой срипт

WITH l AS (
SELECT DISTINCT
  SUBSTR(CODE, 1, 1) l0,
  SUBSTR(CODE, 2, 1) l1,
  SUBSTR(CODE, 3, 2) l2,
  SUBSTR(CODE, 5, 2) l3,
  SUBSTR(CODE, 7, 2) l4,
  SUBSTR(CODE, 9, 2) l5
FROM cod)
SELECT DISTINCT
  l.l0, l1.seq l1, l2.seq l2, l3.seq l3, l4.seq l4, l5.seq l5
FROM l
  JOIN seq_0_to_99 l1 ON l1.seq <= (SELECT MAX(l1.l1) FROM l l1 WHERE l1.l0 = l.l0)
  JOIN seq_0_to_99 l2 ON l2.seq <= (SELECT MAX(l2.l2) FROM l l2 WHERE l2.l0 = l.l0 AND l2.l1 = l.l1)
  JOIN seq_0_to_99 l3 ON l3.seq <= (SELECT MAX(l3.l3) FROM l l3 WHERE l3.l0 = l.l0 AND l3.l1 = l.l1 AND l3.l2 = l.l2)
  JOIN seq_0_to_99 l4 ON l4.seq <= (SELECT MAX(l4.l4) FROM l l4 WHERE l4.l0 = l.l0 AND l4.l1 = l.l1 AND l4.l2 = l.l2 AND l4.l3 = l.l3)
  JOIN seq_0_to_99 l5 ON l5.seq <= (SELECT MAX(l5.l5) FROM l l5 WHERE l5.l0 = l.l0 AND l5.l1 = l.l1 AND l5.l2 = l.l2 AND l5.l3 = l.l3 AND l5.l4 = l.l4)
Но время его выполнения на реальных данных, мягко говоря, долгое. Он сказал, что не дождетесь. smile
Может у кого будут другие, более адекватные идеи?

Отредактированно klow (05.07.2020 07:52:27)

Неактивен

 

#2 03.07.2020 22:57:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Дополнение кодов

ваш пример для строк
000200000
020000005

возвращает
+------+------+------+------+------+------+
| l0   | l1   | l2   | l3   | l4   | l5   |
+------+------+------+------+------+------+
| 0    | 0    | 0    | 0    | 0    | 0    |
| 0    | 1    | 0    | 0    | 0    | 0    |
| 0    | 2    | 0    | 0    | 0    | 0    |
| 0    | 0    | 0    | 0    | 0    | 1    |
| 0    | 1    | 0    | 0    | 0    | 1    |
| 0    | 2    | 0    | 0    | 0    | 1    |
| 0    | 0    | 0    | 0    | 0    | 2    |
| 0    | 1    | 0    | 0    | 0    | 2    |
| 0    | 2    | 0    | 0    | 0    | 2    |
| 0    | 0    | 0    | 0    | 0    | 3    |
| 0    | 1    | 0    | 0    | 0    | 3    |
| 0    | 2    | 0    | 0    | 0    | 3    |
| 0    | 0    | 0    | 0    | 0    | 4    |
| 0    | 1    | 0    | 0    | 0    | 4    |
| 0    | 2    | 0    | 0    | 0    | 4    |
| 0    | 0    | 0    | 0    | 0    | 5    |
| 0    | 1    | 0    | 0    | 0    | 5    |
| 0    | 2    | 0    | 0    | 0    | 5    |
+------+------+------+------+------+------+

а не

klow написал:

итого должно получиться:
000000000
000100000
000200000
010000000
020000000
020000001
020000002
020000003
020000004
020000005

уточните какой должен быть результат

Неактивен

 

#3 05.07.2020 07:55:18

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Дополнение кодов

Да, скрипт не верно отрабатывает. sad
Должно быть.
000000000
000100000
000200000
010000000
020000000
020000001
020000002
020000003
020000004
020000005

Неактивен

 

#4 05.07.2020 13:00:22

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Дополнение кодов

Вопрос закрыт. Спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson