Как сгруппировать по двум полям данных в общем табличном выражении

Мне нужно сравнить окончательные балансы двух таблиц от разных клиентов, сгруппированных по идентификатору. Таблицы имеют одинаковые идентификаторы, но у одной есть несколько записей идентификатора, а у другой - нет. Мне нужно суммировать строку из таблицы с несколькими записями, поэтому у меня есть только одно окончательное число для расчетов.

У меня есть запрос, который так много делает, но теперь мне нужно также сгруппировать его по месяцам. Мой текущий запрос суммирует его за все даты. На самом деле данные нужно отсортировать по идентификатору и по месяцам, чтобы они знали конечный месячный баланс для каждого идентификатора. Есть ли способ сделать это с тем, что у меня есть?

Заранее спасибо.

Это то, что у меня есть.

    -- 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] )
5
задан user973671 10 October 2011 в 15:17
поделиться