Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Добрый день!

Стоит задача последовательного вывода данных в форме сводной таблицы из множества таблиц sql.
Таблиц много, они имеют имена [2014_01g], [2013_10g],...,[2004_04g] и выполнены по одному макету - [regn], [code], [group], [iitg], [dt]. Необходимо получить сводную таблицу следующего вида [regn], [code], [group], [iitg_2004_04g], [iitg_2013_10g],...,[iitg_2014_01g], где [iitg_2004_04g] - данные столбца [iitg] из таблицы [2004_04g] и т.д.

Проиллюстрирую на примере
+
таблица [2014_01g]
regncodegroupiitgdt
1111Касса874171901.01.2014
1112Корсчет в ЦБ1696650101.01.2014
1113НОСТРО3391742501.01.2014
1114Средства в расчетах83507301.01.2014
1121Средства в ЦБ4329795701.01.2014
1122Средства в МБК до 30 дней7956748101.01.2014

таблица [2013_10g]
regncodegroupiitgdt
1111Касса761987301.10.2013
1112Корсчет в ЦБ1333356601.10.2013
1113НОСТРО1092527301.10.2013
1114Средства в расчетах118094401.10.2013
1121Средства в ЦБ1385276301.10.2013
1122Средства в МБК до 30 дней4858711501.10.2013

итоговая (сводная) таблица
regncodegroupiitgiitg
1111Касса76198738741719
1112Корсчет в ЦБ1333356616966501
1113НОСТРО1092527333917425
1114Средства в расчетах1180944835073
1121Средства в ЦБ1385276343297957
1122Средства в МБК до 30 дней4858711579567481


Для составления итоговой таблицы я написал следующий код, но в нем будет сложно перечислить всех, кого я хотел
+
SELECT a.[regn], a.[code], a.[group], b.[iitg], a.[iitg] FROM [dbo].[2014_01g] a
LEFT JOIN [dbo].[2013_10g] b
ON a.regn=1 AND a.regn=b.regn AND a.code=b.code


Научите, пожалуйста, как мне реализовать такое преобразование с моими данными?! Спасибо!
29 май 14, 11:36    [16090030]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вы про инстркуцию UNION ALL слышали ?
29 май 14, 11:37    [16090039]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Либо создайте сводную таблицу и наполняйте данными при помощи INSERT tt SELECT .. FROM ..
Решение зависит от более полной постановки задачи.
29 май 14, 11:52    [16090169]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Glory, таблиц больше сорока и их перечень динамический, пополняется со временем.
нужен цикл по всем сразу. как все скидывать в сводную?
29 май 14, 12:07    [16090323]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Владислав Колосов
Решение зависит от более полной постановки задачи.
Господа, куда уж полнее? все же расписал, нет?
29 май 14, 12:08    [16090327]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
все же расписал, нет?

В результате должна появится таблица с данными или текст запроса ?
Задача разовая или регулярная ?
29 май 14, 12:11    [16090358]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Glory
PlanB
все же расписал, нет?

В результате должна появится таблица с данными или текст запроса ?
Задача разовая или регулярная ?
регулярная.
29 май 14, 12:12    [16090369]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
PlanB,

Надо перейти на одну таблицу с колонкой YYYYMM и секционировать её по этой колонке.
Держать информацию в метаданных (названии таблицы) - моветон.
29 май 14, 12:13    [16090373]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
Glory
пропущено...

В результате должна появится таблица с данными или текст запроса ?
Задача разовая или регулярная ?
регулярная.

Т.е. регулярно должна меняться структура итоговой таблицы ? Потому что для кажого периода будет добавляться поле ?
29 май 14, 12:15    [16090381]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
iap
PlanB,

Надо перейти на одну таблицу с колонкой YYYYMM и секционировать её по этой колонке.
Держать информацию в метаданных (названии таблицы) - моветон.
в таблицах есть поле даты [dt]. фантазии назвать таблицы как-то по-другому у меня не хватило =))
29 май 14, 12:16    [16090390]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Glory
Т.е. регулярно должна меняться структура итоговой таблицы ? Потому что для кажого периода будет добавляться поле ?
Вы совершенно правы. результаты данного запроса из сервера будут падать непосредственно в GUI и с ними будет работать пользователь.
29 май 14, 12:18    [16090406]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
результаты данного запроса

Млин.
Еще раз вопрос - "В результате должна появится таблица с данными или текст запроса ?"
29 май 14, 12:19    [16090412]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Glory
PlanB
результаты данного запроса

Млин.
Еще раз вопрос - "В результате должна появится таблица с данными или текст запроса ?"
текст запоса
29 май 14, 12:20    [16090417]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
Glory
пропущено...

Млин.
Еще раз вопрос - "В результате должна появится таблица с данными или текст запроса ?"
текст запоса

Если каждый раз в запросе разное число полей, то это динамический запрос
И это будет плохой запрос
29 май 14, 12:21    [16090426]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Можно генерировать динамичекий запрос (список соответствующих таблиц запросом Вы, надеюсь, можете получить?)
Хотя вообще структура ужасная
29 май 14, 12:23    [16090437]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Кот Матроскин
Можно генерировать динамичекий запрос (список соответствующих таблиц запросом Вы, надеюсь, можете получить?) Хотя вообще структура ужасная
я не могу делать иную структуру - слишком много расчетов, если хранить исходники.
>>список соответствующих таблиц запросом Вы, надеюсь, можете получить
select name from sys.tables where name like ('%g')
29 май 14, 12:29    [16090469]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
PlanB
я не могу делать иную структуру - слишком много расчетов, если хранить исходники.

Какие расчеты? какие исходники?

PlanB
select name from sys.tables where name like ('%g')



Ну и сделайте курсор из этого запроса и собирайте итоговую команду в этом курсоре.
29 май 14, 12:32    [16090508]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Кот Матроскин
Ну и сделайте курсор из этого запроса и собирайте итоговую команду в этом курсоре.
как мне воткнуть много джоинов в курсор? а с помощью pivot низя сделать? я не вкуриваю, может это вообще не про то
29 май 14, 12:36    [16090541]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Ну так я постановки задачи не увидел, Вы выдали частное решение, которое пытаетесь обсуждать. Поэтому никто ничего конкретного сказать не может.
29 май 14, 12:36    [16090545]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Владислав Колосов
Ну так я постановки задачи не увидел, Вы выдали частное решение, которое пытаетесь обсуждать. Поэтому никто ничего конкретного сказать не может.
да нормально я написал, все же понятно. много таблиц превратить в одну.
29 май 14, 12:40    [16090570]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
как мне воткнуть много джоинов в курсор?

Курсор будет по списку таблиц.
И именно курсор доолжен "воткнуть" в текст запроса все нужнные поля и таблицы

PlanB
а с помощью pivot низя сделать?

Можно. Только текст запроса все равно придется формировать динамически
29 май 14, 12:40    [16090571]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Glory
Member

Откуда:
Сообщений: 104751
PlanB
да нормально я написал, все же понятно. много таблиц превратить в одну.

Это вам так кажется. Вы даже не замечаете, что исходные таблица и результат отличаются.
29 май 14, 12:41    [16090582]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
PlanB,

Вам не надо "втыкать много джойнов в курсор" - Вам надо в курсоре набрать строку Вашего итогового запроса.
в духе
...
select @FromCommand = @FromCommand  +  ' Left join ' +  @table_name + ' on ' +  @table_name  + '.Regn = a.Regn and ' + @table_name  + '.code = a.code'
...

и потом исполнить ее
29 май 14, 12:44    [16090604]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
PlanB, Вы хотите плохую архитектуру данных исправить кодом, а так не бывает. Решение это этого не станет эффективным.
29 май 14, 12:44    [16090606]     Ответить | Цитировать Сообщить модератору
 Re: сбор данных из множества таблиц в одну сводную  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Владислав Колосов
PlanB, Вы хотите плохую архитектуру данных исправить кодом, а так не бывает. Решение это этого не станет эффективным.
блин, расскажите тогда мне про грамотную архитектуру
29 май 14, 12:50    [16090650]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить