2015-03-24 3 views
0

Есть ли все-таки устранить эту логику курсора?Перезапись TSQL для устранения курсора

мне нужно перебрать @YearMonth (который будет в конечном итоге выглядит примерно так: «2015-01», «2015-02», «201503» (вплоть до текущей даты)

DECLARE myCursor CURSOR 
FOR SELECT DISTINCT(YearMonth) FROM Submissions 
OPEN myCursor 

FETCH NEXT FROM myCursor INTO @YearMonth 
LOOP BEGIN 
      INSERT INTO #EngagementCount (YearMonth, EngagmentCount) 
      SELECT @YearMonth AS YearMonth COUNT(e.EngagementID) AS EngagementCount 
      FROM Engagements AS e 
      WHERE @YearMonth >= e.StartDate and @YearMonth < e.ExpiresOn 
LOOP END 
+0

Давай формате вопрос – Paparazzi

ответ

0

Это должно работать:

SELECT YearMonth, COUNT(e.EngagementID) AS EngagementCount 
FROM Submissions s 
INNER JOIN Engagements e ON s.YearMonth BETWEEN e.StartDate AND e.Expires 
GROUP BY YearMonth 
+0

Я хотел бы добавить Distinct Suqbuery для представления ВЫБРАТЬ годМесяц, COUNT (e.EngagementID) AS EngagementCount FROM (SELECT DISTINCT FROM годМесяц материалы) s INNER JOIN ВЗАИМОДЕЙСТВИЯ е ON s.YearMonth МЕЖДУ e.StartDate И e.Expires ГРУППА BY YearMonth – user3281440

Смежные вопросы