2015-11-09 4 views
0

У меня есть эта таблица - Имя: MYTABLE:Граф поля таблицы Pivot В SQL Server

  Amount Desc Month Sym code ID 
     $32,323.00 Bla1 1 121 3 2424221 
     $4,242.00 Bla1 1 121 3 2424221 
     $3,535.00 Bla1 1 121 1 3230824 
     $4,984.00 Bla2 1 433 1 3230824 
     $47,984.00 Bla2 2 433 1 3230824 
     $41.00  Bla2 2 433 1 3230824 
     $3,472.00 Bla6 1 D2 27 2297429 
     $3,472.00 Bla6 1 D2 27 2297429 
     $3,239.00 Bla6 2 D2 27 2297429 
     $4,249.00 Bla8 2 114 24 3434334 

ID и месяц Стенды для зарплаты. Есть 6 зарплаты: 1 + 3230824, 2 + 3230824 и т.д.

И я хочу, чтобы создать стержень так:

 Jan    Feb 
    count amount count amount 
121 2 40100$  0 0 
433 1 52968$  1 48025$ 
D2  1 6944$  1 3239$ 
114 0  0   1 4249$ 

Объяснение: 121 два в январе, потому что ID = 2424221 получил его дважды 3230824 получил его один раз. Количество «вхождений» в зарплатах равно двум.

Но, в сумме, я суммирую каждую вещь. Чтобы получить общую сумму денег в зарплате для этого Sym.

То же самое, 433 получил значение 1 в феврале, например, потому что только 3230824 получил его (дважды).

Я начал писать это:

SELECT * 
FROM (
    SELECT 
     [Sym] as Sym, [Month] as [month], [Amount] as Amount 
    FROM Mytable 
) as T 
PIVOT 
(
    Sum(Amount) 
    FOR [Month] IN ([1],[2]) 
)AS piv 

Ну Количество правильно Но я не знаю, как я могу вытащить этот счет, как я объяснил около суммы в сводной таблице.

+0

'433' имеет только один вход для Месяца 1 для' $ 4,984.00' Где вы придумали '' 52968 $ – JamieD77

ответ

1
SELECT 
    [Sym], 
    COALESCE(SUM(CASE WHEN [1] IS NULL THEN NULL ELSE [Cnt] END), 0) [Jan Count], 
    COALESCE(SUM(CASE WHEN [1] IS NULL THEN NULL ELSE [1] END), 0) [Jan Amount], 
    COALESCE(SUM(CASE WHEN [2] IS NULL THEN NULL ELSE [Cnt] END), 0) [Feb Count], 
    COALESCE(SUM(CASE WHEN [2] IS NULL THEN NULL ELSE [2] END), 0) [Feb Amount] 
FROM (
    SELECT 
     mt1.[Sym] as Sym, mt1.[Month] as [month], mt1.[Amount] as Amount, mt2.[Cnt] 
    FROM Mytable mt1 
    JOIN (SELECT COUNT(DISTINCT [ID]) [Cnt], [Sym], [Month] 
      FROM MyTable 
      GROUP BY [Sym], [Month]) mt2 
     ON mt1.[Sym] = mt2.[Sym] AND mt1.[Month] = mt2.[Month] 

) as T 
PIVOT 
(
    Sum(Amount) 
    FOR [Month] IN ([1],[2]) 
)AS piv 
GROUP BY [Sym] 

SQL Fiddle

+0

Спасибо годов. Сумма правильная, но похоже, что значение sml принимает значения, которые не находятся в исходных данных. Есть ли причина для этого? – oco

+0

Я не уверен, что понимаю, что вы просите .. что такое sml-значение? – JamieD77

+0

Эй, Посмотрите: – oco