मैंने टिप्पणी में दिए गए SQL Fiddle को संशोधित किया है जो आपको वांछित आउटपुट देगा, बशर्ते आपके पास पहले से ही दैनिक योग हों:
http://www.sqlfiddle.com/#!6/09168/2ए>
DECLARE @startDate datetime
DECLARE @endDate datetime
SELECT @startDate = '2012-10-08'
SELECT @endDate = '2012-10-12'
SELECT
DT1.ddate,
DT1.phone,
DT1.letter,
DT1.email,
DT1.web,
SUM(DT2.phone) phoneTotal,
SUM(DT2.letter) letterTotal,
SUM(DT2.email) emailTotal,
SUM(DT2.web) webTotal
FROM
DailyTotals DT1
LEFT JOIN DailyTotals DT2 ON DT1.ddate >= DT2.ddate AND DT2.ddate >= @startDate
WHERE
DT1.ddate <= @endDate
GROUP BY
DT1.ddate,
DT1.phone,
DT1.letter,
DT1.email,
DT1.web
यदि आप इसे एक बयान देना चाहते हैं तो आपको डेलीटोटल को अपनी सबक्वायरी से बदलना होगा जो आपको दैनिक योग देता है। हालांकि मेरा सुझाव है कि इसे DailyTotals नाम से एक दृश्य बनाएं और उसका उपयोग करें।
संपादित करें:
आप अस्थायी तालिका के बजाय अपनी तिथि सीमा उत्पन्न करने के लिए सीटीई का उपयोग कर सकते हैं। मैंने आपकी पूरी क्वेरी को संशोधित कर दिया है जो आप कहते हैं कि @temp के बजाय CTE के साथ जुड़ने के लिए काम करता है। हालांकि मेरे पास इसका परीक्षण करने का कोई तरीका नहीं है। अगर यह काम नहीं करता है तो कृपया अपनी स्कीमा के साथ एक SLQ Fiddle बनाएं और मैं इसे फिर से कोशिश करूंगा।
WITH Dates AS
(
SELECT CONVERT(date, MIN(ComplaintTime)) AS ddate,
MAX(ComplaintTime) as EndDate
FROM
Complaints
UNION ALL
SELECT DATEADD(DAY, 1, ddate), EndDate
FROM Dates
WHERE DATEADD(DAY, 1, ddate) <= EndDate
)
SELECT * FROM
(select ddate,ISNULL(L,0) AS Letter,
ISNULL(P,0) AS Phone,
ISNULL(E,0) AS Email,
ISNULL(W,0) AS WEB
FROM
(
select ComplaintMedia_Abbri,
ddate,COUNT(ComplaintMedia) as c
from Complaint
INNER JOIN Dates
ON convert(date,ComplaintDate)=ddate OPTION (MAXRECURSION 500)
WHERE isnull(Receivedby_Dept,Relatesto_Dept)=1
group by ComplaintMedia_Abbri,ddate
) p
pivot (SUM(c) FOR ComplaintMedia_Abbri IN (E,W,L,P)) AS pvt
) AS [A]
INNER JOIN
(
select ddate,ISNULL(L,0) AS LetterTot,
ISNULL(P,0) AS PhoneTot,
ISNULL(E,0) AS EmailTot,
ISNULL(W,0) AS WEBTot
FROM
(
select ComplaintMedia_Abbri,ddate,
COUNT(ComplaintMedia_Abbri) as c
from Complaint
INNER JOIN Dates OPTION (MAXRECURSION 0)
ON CONVERT(date,ComplaintDate) <= ddate OPTION (MAXRECURSION 0)
WHERE isnull(Receivedby_Dept,Relatesto_Dept)=1
group by ComplaintMedia_Abbri,ddate
) p
pivot (SUM(c) FOR ComplaintMedia_Abbri IN (E,W,L,P)) AS pvt
) AS [B]
ON A.ddate=B.ddate
order by A.ddate