Последние 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