2011-10-10 36 views
5

我需要比較來自按ID分組的不同客戶端的兩個表格的最終餘額。這些表具有相同的ID但是其中一個具有多個ID條目,另一個不具有。我需要從表格中總結出多條記錄,所以我只有一個最終數字來進行計算。如何在公用表格表達式中按兩個數據字段進行分組

我有這麼多的查詢,但現在我需要把它按月分組。我目前的查詢總計所有日期。數據實際上需要按ID和月份進行排序,以便他們知道每個ID的結束月度餘額。到目前爲止,有沒有辦法做到這一點?

在此先感謝。

這是我到目前爲止。

-- 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) 
    )  

這會給你每個月的月度分解爲每個ID。然後將您的JOIN更改爲:

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

謝謝你,JNK,工作。 – user973671

相關問題