Последние 2 месяца записи в SQL

Я пытаюсь этот SQL-запрос, чтобы получить текущую сумму, а также последние 2 месяца записей и текущий месяц означает, что всего 3 месяца

Select distinct 
tblRv.Owner,
(Select Count(*) as total from tblvv WHERE MasterID =tblRv.ID and Name <> '') 
as currentdata
from tblRe
inner join tblRv 
On tblRe.RID = tblRv.RID
WHERE 
tblRe.StartDate between dateadd(m, -2, getdate()) and getdate() and 
//tblRe.StartDate >= '2016-07-01 00:00:00' AND 
//tblRe.EndDate <= '2016-07-08 23:59:59' 
  and tblRe.Region = 'uk' and
tblRv.Owner='Roh' 
order by tblRv.Owner

когда я exe это покажи мне, как это

OwnerName     currentdata
Roh               1
Roh               2
Roh               3
Roh               5

и когда я проверяю индивидуально, пишите запрос и проверяйте дату 2016-07-01 и сегодня 2016-07-30 даты, то это показывает мне данные 3 а также 2016-06-01 00:00:00 а также 2016-06-31 23:59:59 покажи мне данные 1 а также 2016-05-01 00:00:00,2016-05-31 23:59:59 покажи мне данные 0
так что я хочу такие данные

owner july june may 
roh   3     1   0

Кроме того, когда будет текущий месяц, т.е. август, данные должны отображаться за последние 2 месяца, то есть июнь июль

2 ответа

Select 
         tblRv.Owner
        ,DATENAME(MONTH,tblRe.StartDate) as [Month]
        ,ISNULL(SUM(total),0)   as currentdata
from tblRe
INNER JOIN tblRv ON tblRe.RID = tblRv.RID
LEFT  JOIN (
            Select Count(*) as total ,MasterID
            from tblvv 
            WHERE Name <> ''
            GROUP BY MasterID
            ) tblvv 
ON tblvv.MasterID =tblRv.ID 
WHERE tblRe.StartDate >= DATEADD(MONTH, -2, GETDATE()) 
 AND  tblRe.EndDate   <= GETDATE()
 AND  tblRe.Region = 'uk' 
 AND  tblRv.[Owner] ='Roh' 
GROUP BY tblRv.Owner
        ,DATENAME(MONTH,tblRe.StartDate)
order by tblRv.[Owner]

Вы можете попробовать выполнить сводный запрос, в котором три столбца, которые нужно повернуть, - это текущий, предыдущий и предыдущий предыдущий месяц в вашем наборе данных. Обратите внимание, что мне пришлось переписать ваш запрос, чтобы удалить подзапросы в SELECT предложение, потому что это делает невозможным объединение этих столбцов.

SELECT tblRv.Owner,
    SUM(CASE WHEN tblRe.StartDate = GETDATE() THEN t.total ELSE 0 END) AS currMonth,
    SUM(CASE WHEN tblRe.StartDate = DATEADD(m, -1, GETDATE())
             THEN t.total ELSE 0 END) AS prevMonth,
    SUM(CASE WHEN tblRe.StartDate = DATEADD(m, -2, GETDATE())
             THEN t.total ELSE 0 END) AS lastPrevMonth
FROM tblRe
INNER JOIN tblRv
    ON tblRe.RID = tblRv.RID
INNER JOIN
(
    SELECT MasterID, COUNT(*) AS total
    FROM tblvv
    GROUP BY MasterID
    WHERE Name <> ''
) AS t
    ON tblRv.ID = t.MasterID
WHERE tblRe.StartDate BETWEEN DATEADD(m, -2, GETDATE()) AND GETDATE() AND
      tblRe.Region = 'uk' AND
      tblRv.Owner = 'Roh' 
GROUP BY tblRv.Owner
ORDER BY tblRv.Owner
Другие вопросы по тегам