2016-07-26 4 views
0

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

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 и Todate 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 месяца iejune июля

ответ

0

Вы можете попробовать делать pivot query, где три столбца, которые должны быть повернуты, представляют собой текущий, предыдущий и предыдущий предыдущий месяц в вашем наборе данных. Обратите внимание, что мне пришлось переписать ваш запрос, чтобы удалить подзапросы в предложении 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 
+0

это шоу ошибка. Msg 130, Level 15, State 1, Line 4 Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос. – user6628729

+0

Неверный синтаксис рядом с ключевым словом «ГДЕ». – user6628729

+0

Что такое t после того, где – user6628729

0
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] 
+0

это ничего не показывать .. только этот владелец шоу, месяц, currentdata как заголовок .. – user6628729

+1

@ user6628729 Вы можете настроить скрипт sql? Его действительно сложно рассказать, каковы ваши данные и как должен быть написан запрос. –

+0

Это не даст желаемого результата, потому что вы не поворачивались, но я согласен с перемещением запроса count в соединение. –