Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

आज और कुल पिछले आज से एक ही कॉलम के परिणाम एक एसक्यूएल क्वेरी में गठबंधन करें

मैंने टिप्पणी में दिए गए 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में DECODE () फ़ंक्शन

  2. डेटाग्रिड की पंक्तियों के माध्यम से पुनरावृति

  3. टी-एसक्यूएल गतिशील धुरी

  4. SQL सर्वर में विभिन्न स्ट्रिंग प्रकारों के बीच अंतर?

  5. dtexec का उपयोग करके SSIS पैकेज चलाना