2011-10-10 10 views
5

मुझे आईडी द्वारा समूहित विभिन्न ग्राहकों से दो तालिकाओं के अंतिम शेष की तुलना करने की आवश्यकता है। तालिकाओं में एक ही आईडी है लेकिन एक में एकाधिक आईडी प्रविष्टियां हैं और दूसरा नहीं है। मुझे टेबल से कई प्रविष्टियों के साथ पंक्ति को जोड़ना होगा, इसलिए मेरे पास गणना करने के लिए केवल एक अंतिम संख्या है।एक सामान्य तालिका अभिव्यक्ति में दो डेटा फ़ील्ड द्वारा समूहबद्ध करने के लिए कैसे करें

मेरे पास यह प्रश्न है जो बहुत कुछ करता है, लेकिन अब मुझे इसे महीने तक समूह में लाने की आवश्यकता है। मेरी वर्तमान क्वेरी सभी तिथियों के लिए कुल योग करती है। डेटा को वास्तव में आईडी और महीने के अनुसार क्रमबद्ध करने की आवश्यकता है ताकि वे प्रत्येक आईडी के लिए अंतिम मासिक शेष राशि जान सकें। क्या मेरे पास अब तक ऐसा करने का कोई तरीका है?

अग्रिम धन्यवाद।

यह मेरे पास अब तक है।

-- Data setup 
    CREATE TABLE [Table1] 
    (
     [ID] INT, 
     [cost] INT, 
     [traceNumber] INT, 
     [TheDate] DATE 
    ) 

    INSERT [Table1] 
    VALUES (1, 200, 1001, '9/07/2011'), 
      (1, -20, 1002, '9/08/2011'), 
      (1, 130, 1003, '10/10/2011'), 
      (2, 300, 1005, '10/10/2011') 

    CREATE TABLE [Table2] 
    (
     [ID] INT, 
     [cost] INT 
    ) 

    INSERT [Table2] 
    VALUES (1, 200), 
      (2, 300) 

    -- Query 
    ;WITH [cteTable1Sum] AS 
    (
     SELECT [ID], SUM([cost]) AS [cost] 
     FROM [Table1] 
     GROUP BY [ID] 
    )  
    SELECT [Table1].[ID], 
      [Table1].[TheDate], 
      [Table1].[traceNumber], 
      [Table1].[cost] AS [Frost_Balance], 
      cte.[cost] AS [SUM_Frost_Balance], 
      [Table2].[cost] AS [Ternean_Balance], 
      cte.[cost] - [Table2].[cost] AS [Ending_Balance] 
    FROM [Table1] 
    INNER JOIN [Table2] 
     ON [Table1].[ID] = [Table2].[ID] 
    INNER JOIN [cteTable1Sum] cte 
     ON [Table1].[ID] = cte.[ID] 

मैंने कोशिश की और मुझे गलत जवाब मिल गया।

WITH [cteTable1Sum] AS 
     (SELECT [ID], SUM([cost]) 
     AS [cost] FROM [Table1] 
     GROUP BY [ID], [TheDate]) 

उत्तर

4

आप शायद इस लिए MONTH() और YEAR() कार्यों का उपयोग करना चाहिए:

;WITH [cteTable1Sum] AS 
    (
     SELECT [ID], 
       MONTH(TheDate) as Mo, 
       YEAR(TheDate) as yr, 
       SUM([cost]) AS [cost] 
     FROM [Table1] 
     GROUP BY [ID], MONTH(TheDate), YEAR(TheDate) 
    )  

इससे आप प्रत्येक आईडी के लिए प्रत्येक माह की मासिक टूटने दे देंगे। फिर अपने JOIN को:

INNER JOIN [cteTable1Sum] cte 
     ON [Table1].[ID] = cte.[ID] 
     AND MONTH(Table1.TheDate) = cte.Mo 
     AND YEAR(Table1.TheDate) = cte.Yr 
+0

धन्यवाद, धन्यवाद, जेएनके, जो काम करता है। – user973671

संबंधित मुद्दे