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

Откуда:
Сообщений: 12
Здравствуйте, подскажите, как реализовать в следующем запросе цикл.
Каждый день формируется новая база Statistics_20170901, Statistics_20170902, Statistics_20170903 и т.д.
Необходимо обновлять запрос, где каждый день добавляются данные из новой базы.

select
U.Name as [Гос. номер]
,S01.TotalKm as [Пробег (1 сентября)]
,S02.TotalKm as [Пробег (2 сентября)]
,S03.TotalKm as [Пробег (3 сентября)]
,S04.TotalKm as [Пробег (4 сентября)]

from Statistics_20170901.dbo.Units as U
LEFT JOIN Statistics_20170901.dbo.UnitStatistics as S01 ON (U.ID=S01.UnitId)
INNER JOIN Statistics_20170902.dbo.UnitStatistics as S02 ON (U.ID=S02.UnitId)
INNER JOIN Statistics_20170903.dbo.UnitStatistics as S03 ON (U.ID=S03.UnitId)
INNER JOIN Statistics_20170904.dbo.UnitStatistics as S04 ON (U.ID=S04.UnitId)


Можно ли реализовать запрос со следующим условием? Пытаться смержить базы с названием от Statistics_20170901 до Statistics_20170930 и если нужная база еще не создана, то пропускать ее в запросе без ошибки.
25 сен 17, 08:09    [20819644]     Ответить | Цитировать Сообщить модератору
 Re: Цикличный запрос из нескольких одинаковых баз  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2384
Блог
RC88,

Строй динамический запрос и всё.
25 сен 17, 08:18    [20819652]     Ответить | Цитировать Сообщить модератору
 Re: Цикличный запрос из нескольких одинаковых баз  [new]
RC88
Member

Откуда:
Сообщений: 12
Павел Воронцов
RC88,
Строй динамический запрос и всё.

Павел Воронцов,
а можно, пожалуйста, поподробнее. с примером желательно.
25 сен 17, 11:18    [20820024]     Ответить | Цитировать Сообщить модератору
 Re: Цикличный запрос из нескольких одинаковых баз  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3712
RC88
Павел Воронцов
RC88,
Строй динамический запрос и всё.

Павел Воронцов,
а можно, пожалуйста, поподробнее. с примером желательно.


Пример:

exec('динамический запрос и всё');
25 сен 17, 11:22    [20820038]     Ответить | Цитировать Сообщить модератору
 Re: Цикличный запрос из нескольких одинаковых баз  [new]
aleks222
Guest
declare @d1 datetime, @d2 datetime, @str as nvarchar(4000);

select @d1 = '20170901', @d2 = '20170930';

with ns as ( select n = number from dbo.Numbers where number < datediff( day, @d1, @d2 ) + 1 )
   , ds as ( select *, dt = convert( nvarchar(32), dateadd( day, n,  @d1), 112 ) from ns )
   , bs as ( select *
                 , [table] = N'Statistics_' + dt +N'.dbo.UnitStatistics'
                 , tAlias = N'S' + cast(n as nvarchar(16))  
                 , cAlias = N'[Пробег (' + dt +N')]'
               from ds 
           )
   , vs as ( select * from bs where object_id([table]) is not null )
  select @str = 'select U.Name as [Гос. номер]' 
       + ( select N', ' + cAlias + N' = ' + tAlias + N'.TotalKm' from vs order by n for xml path('') )
       + N' from Statistics_' + convert( nvarchar(32), @d1, 112 ) + N'.dbo.Units as U '
       + ( select N' left outer join ' + [table] + N' as ' + tAlias + N' on U.ID = ' + tAlias + N'.UnitId' from vs order by n for xml path('') )
    from vs;

select @str;

exec (@str);
25 сен 17, 14:05    [20820696]     Ответить | Цитировать Сообщить модератору
 Re: Цикличный запрос из нескольких одинаковых баз  [new]
RC88
Member

Откуда:
Сообщений: 12
aleks222,

Спасибо.
Правда создал базу Numbers в ней таблицу Numbers и 30 значений, а в результате выдает 1 строчку с NULL
25 сен 17, 15:43    [20821109]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить