|
0
User_Agronom
15.09.15
✎
21:08
|
Есть две таблицы. Нужно соединить эти таблицы (например, левым соединением) по полю КодАБС
Проблема состоит в том, что значения в поле КодАБС имеют различное количество первых нулей. Кроме того, они имеют различную длину.
Вопрос: каким-нибудь образом можно обработать это в запросе?
Пример: Поле в таблице А 000123, а в таблице Б 0123.
Или в таблице А 5879, а в таблице Б 05879.
|
|
|
5
Ildarovich
15.09.15
✎
22:02
|
(4) не понял про "кучу ПОДОБНО". В приведенном в (3) запросе никаких ПОДОБНО нет. Там делается преобразование строки в число. Вот запрос
"ВЫБРАТЬ Дано.НомерСтроки, Дано.КодАБС КАК Строка
|ПОМЕСТИТЬ ДаноА
|ИЗ ТаблА КАК Дано
|;
|ВЫБРАТЬ 0 С, 1 КАК П
|ПОМЕСТИТЬ Р16
|ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10
|ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 100
|ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 1000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 10000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 100000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 1000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 10000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 100000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 1000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000
|ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000
|;
|ВЫБРАТЬ Дано.НомерСтроки, СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК ЧислоАБС
|ПОМЕСТИТЬ ВТаблА
|ИЗ ДаноА КАК Дано, Р16 КАК А, Р16 КАК Б
|ГДЕ Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки
|;
ВЫБРАТЬ Дано.НомерСтроки, Дано.КодАБС КАК Строка
|ПОМЕСТИТЬ ДаноБ
|ИЗ ТаблБ КАК Дано
|;
|ВЫБРАТЬ Дано.НомерСтроки, СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК ЧислоАБС
|ПОМЕСТИТЬ ВТаблБ
|ИЗ ДаноБ КАК Дано, Р16 КАК А, Р16 КАК Б
|ГДЕ Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
|СГРУППИРОВАТЬ ПО Дано.НомерСтроки
|;
В итоге в ВТаблА и ВТаблБ есть поля ЧислоАБС, очищенные от ведущих нулей и букв, по которым можно делать соединение
|
|