2013-08-09 7 views
0

У меня есть набор скриптов, которые я хочу цикл через несколько раз и добавлять результаты в таблицу temp в столбцы points_mth1, points_mth2 и points_mth3, но, возможно, потребуется вставить новую строку для Клиента, который еще не находится в таблице.SQL Server 2008 - Looping

Стартовый @EndDate вводится, а затем я хочу, чтобы запустить в течение следующих 2-х месяцев, например, 2014-02-01, 2014-03-01 & 2014-04-01

Как добавить петлю до следующего, чтобы работать в течение следующих 2 месяцев?

SET NOCOUNT ON 

DECLARE @EndDate DateTime 

SET @EndDate = '2014-02-01' 

[set of scripts will be run] 

Результатов, которые затем сохраняются в виде временной таблицы, где каждый раз, когда он работает, новый столбец добавляется eg.points_mth2, и сохранить фигуру против CustomerNo в но клиент не существует, чтобы затем вставьте CustomerNo:

IF object_id(N'tempdb..#temp', N'U') IS NOT NULL  DROP TABLE #temp 
SELECT j1.customerno, SUM(points)[points_mth1]  ---> this will store the figures for the first date, then a new column [points_mth2] and [points_mth3] 
into #temp 
FROM customer j1 
JOIN #customer_final j2 ON 
j1.customerno= j2.customerno 
GROUP BY j1.customerno 
+0

вы должны задать конкретный вопрос. Вы просто заявляете о своих целях. Каково ваше препятствие, с которым вам нужна помощь? –

+0

Вы должны попытаться * исключить * цикл в SQL-SQL - это ориентированный на набор язык. Это здорово при работе с данными, когда они имеют дело со всем этим. Не так велико, когда вы вынуждаете его работать по одной строке за раз. Итак, если вы могли бы рассказать нам, с какими данными мы работаем, и каков желаемый результат, мы могли бы вам помочь. Все, что вы описали до сих пор, - это * механизм *, который вы хотели использовать. В SQL вы пытаетесь указать движок *, что вы хотите *, ** не ** * как это сделать * –

ответ

0

не уверен, что именно вы хотите, вероятно, здесь является стартом для вас:

DECLARE @EndDate DATE = '2013-09-30 00:00:00:000'; 
DECLARE @tmpDate DATE = GETDATE(); 

WHILE @tmpDate <= @EndDate 
    BEGIN 
     PRINT @tmpDate; 

     -- do whatever you need here for specific date - @tmpDate 

     SET @tmpDate = DATEADD(DAY, 1, @tmpDate); 
    END