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

Откуда:
Сообщений: 1
Доброе время суток, товарищи. Только начал разбираться с Transact-SQL и тут застрял, как казалось, на элементарном запросе. Вообщем так: есть две таблицы. Первая - образцы отчетов tSample (char Name, int SampleID). Вторая - список всех когда-либо использованных отчетов tSampleArchive (int SampleID, datetime InDateTime). Нужно составить статистику по количеству запусков каждого запроса по годам. Вот тут и начинается проблема. Написал вот что:
--create table t3 (Name char, DStart datetime, Num int)
declare @x1 datetime
declare @x2 datetime  
set @x1 = '2012-01-01'
while @x1 < getdate()
    begin
        set @x2 = dateadd (y, 1, @x1)
        select count (*) as cnt 
        from   tSample inner join tSampleArchive on tSample.SampleID = tSampleArchive.SampleID
        where tSampleArchive.InDateTime between @x1 and @x2
        set @x1 = @x2
    end 

Почитал документацию и примеры в сети, но так и не понял как надо добавлять в таблицу в данном случае. То, что я написал, конечно, ничего в таблицу не заносит, но я от этого цикла отталкивался.
В итоге хотел получить что-то вроде этого:
имя |2012-01-01 |2013-01-01|2014-01-01
Отчет №1 |11 |12 |13
Отчет №2 |14 |15 | 16
...
Хотелось бы все-таки разобраться с этим, а то уже неделю мусолю этот цикл
15 июл 14, 23:09    [16309413]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей в таблицу циклом?  [new]
_human
Member

Откуда:
Сообщений: 566
momusJS,
у вас что-то все в кучу.
выберете сначала, что нужно потом вставляйте.
цикл, скорее всего вам не нужен.

например,
select 
	year(tSampleArchive.InDateTime)
	, count (*) as cnt 
from tSample 
	inner join tSampleArchive on tSample.SampleID = tSampleArchive.SampleID
where tSampleArchive.InDateTime between @x1 and @x2
group by year(tSampleArchive.InDateTime)

вставили
declare @audit table (y int, c bigint)
insert into @audit (y, c)
select 
	year(tSampleArchive.InDateTime) as yr
	, count (*) as cnt 
from tSample 
	inner join tSampleArchive on tSample.SampleID = tSampleArchive.SampleID
where tSampleArchive.InDateTime between @x1 and @x2
group by year(tSampleArchive.InDateTime)
15 июл 14, 23:54    [16309546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить