munirshaikh Ответов: 3

Сумма динамических столбцов сводной таблицы в SQL Server


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

Мой стол: ATTENDANCE_MASTER содержит: идентификатор, Stud_id, ATT_DATE, подарок

который хранит такие данные, как:

ID  Stud_id ATT_DATE   PRESENT
1     1     2015-08-1    1
2     2     2015-08-1    0
3     3     2015-08-1    1
4     1     2015-08-2    0
5     2     2015-08-2    1
6     3     2015-08-2    1


Я создал сводный запрос

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);

SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(ATT_DATE)
  FROM (SELECT p.ATT_DATE FROM dbo.ATTENDANCE_MASTER AS p
  GROUP BY p.ATT_DATE) AS x;

SET @sql = N'SELECT Stud_id, ' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT p.ATT_DATE, p.Stud_id, p.PRESENT FROM dbo.ATTENDANCE_MASTER AS p
) AS j
PIVOT
(
  SUM(PRESENT) FOR ATT_DATE IN ('+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') + ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;


Мне нужна сумма столбцов, таких как

Stud_ID  2015-08-01   2015-08-2 2015-08-3 Total
1            1            0         1      2
2            1            1         1      3
3            1            1         0      2
4            0            0         1      1


Пожалуйста, предложите мне решение.

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

Maciej Los

Что вы пробовали? Где ты застрял?

3 Ответов

Рейтинг:
20

Animesh Datta

Привет ,
Ссылаться :
SQL-Pivot с общим итогом столбца и строки


Maciej Los

Отличный ответ, 5!

Animesh Datta

- Спасибо, Сэр .

Рейтинг:
2

jamuro77

Привет, я недавно написал статью об этом. Вы можете проверить это по адресу Использование PIVOT с SQL Server[^]

Я надеюсь, что это сработает для вас!


Dave Kreskowiak

Не воскрешайте вопросы, которым больше года.

Рейтинг:
1

Maciej Los

Логика такова:

SELECT T.*, ([2015-08-01] + [2015-08-02] + [2015-08-03]) AS Total
FROM 
(
-- your dynamic query
) AS T


где [2015-08-01] + [2015-08-02] + [2015-08-03] комм из @columns переменная ;)

Понял?


Wendelius

Выглядеть хорошо.

Maciej Los

Спасибо, Мика.