Firebird 2.5 Перенос данных из нес-ких таблиц в одну по определенному алгоритму

BowMaster
Дата: 22.08.2012 14:53:51
СУБД Firebird 2.5

Столкнулся со сложной для меня задачей, буду рад помощи.
Задача такова необходимо перенести по некому алгоритму данные из нескольких таблиц в новую таблицу. Опишу пока лишь часть задачи, потом по ходу остальное, так будет проще.

Таблицы содержат данные о типе, напряжении, количестве устройств и дате установки. Одна из таблиц IsolatorsCount, в ней интересуют поля: OwnerGUID, TypeIdent, Qty. Первичный ключ на поля OwnerGUID, TypeIdent. Сочетание значений этих 2х полей уникальны. Таблица AddEqData с интересующими нас полями GUID, OwnerGUID, SampleDate связана с таблицей IsolatorsCount следующим образом: поле GUID с полем OwnerGUID таблицы IsolatorsCount, как 1 ко многим. Так же есть таблица IsolatorsReference, интересуют ее поля Unom и Ident. Ее связь с таблицей IsolatorsCount: поле Ident с полем TypeIdent 1 ко многим.
Необходимо сделать следующее: в таблицу скажем New_Table с полями DT, GUID, Metertype, U, Number необходимо записать данные из IsolatorsCount по следующему алгоритму: в DT пишем SampleDate из табл. AddEqData где GUID=OwnerGUID из текущей строки табл. IsolatorsCount, в GUID пишем OwnerGUID из той же табл. AddEqData где GUID=OwnerGUID из текущей строки табл. IsolatorsCount, в MeterType всегда пишем число 12, в U пишем Unom из табл. IsolatorsReference где Ident=TypeIdent из текущей строки табл. IsolatorsCount, в Number пишем Qty из табл. IsolatorsCount. Есть так же еще одно условие: Если значение Qty не изменилось с прошлой даты(SampleData), то эту строку надо пропустить и не записывать в New_Table.

Я мог бы сделать это использовав язык программирования и несколько относительно простых SQL запросов, но задача стоит так что желательно сделать используя только SQL.
pastor
Дата: 22.08.2012 15:02:16
BowMaster,

select 'insert into target1( field1, field2) values ('|| s1.field1 ||','|| s1.field2||')'
from source1 s1
Dimitry Sibiryakov
Дата: 22.08.2012 15:28:56

BowMaster
Необходимо сделать следующее: в таблицу скажем New_Table с полями DT, GUID, Metertype, U,
Number необходимо записать данные из IsolatorsCount по следующему алгоритму: в DT пишем
SampleDate из табл. AddEqData где GUID=OwnerGUID из текущей строки табл. IsolatorsCount, в
GUID пишем OwnerGUID из той же табл. AddEqData где GUID=OwnerGUID из текущей строки табл.
IsolatorsCount, в MeterType всегда пишем число 12, в U пишем Unom из табл.
IsolatorsReference где Ident=TypeIdent из текущей строки табл. IsolatorsCount, в Number
пишем Qty из табл. IsolatorsCount. Есть так же еще одно условие: Если значение Qty не
изменилось с прошлой даты(SampleData), то эту строку надо пропустить и не записывать в
New_Table.

Не вижу в этой куче букаф ничего, что не осилил бы оператор MERGE.

Posted via ActualForum NNTP Server 1.5

BowMaster
Дата: 23.08.2012 00:13:33
Опыта в использовании Firebird немного. Буду благодарен за небольшой примерчик как с помощью MERGE записать в New_Table.DT значения AddEqData.SampleData где AddEqData.GUID=IsolatorsCount.OwnerGUID и так пройтись по всей таблице IsolatorsCount. При этом не стоит забывать это условие "Если значение Qty не изменилось с прошлой даты(SampleData), то эту строку надо пропустить и не записывать в New_Table". Еще хотел уточнить можно ли с помощью MERGE в том же запросе записывать в поле METERTYPE число 12(оно не из таблиц).
Dimitry Sibiryakov
Дата: 23.08.2012 01:44:10

Какие примеры из Doc\README.merge тебе непонятны?..

Posted via ActualForum NNTP Server 1.5