Как вставить промежуточный ряд? - PullRequest
2 голосов
/ 16 января 2012

У меня есть следующая таблица:

Year    Line    January Febraury   March .... December
2011     B1       5       10         20
2012     B1      10       15         25         ...
2011     A1       4        8         10         ...

И я хочу вставить строку промежуточных итогов каждые две строки (если существует), в частности, каждый раз, когда year и Line меняются: так

Year    Line    January Febraury   March .... December
2011     B1        5       10         20
2012     B1       10       15         25         ...
 ---     B1     +100%   +50%       +25%      ..
2011     A1      4        8          10         ...

Как я могу сделать это в T-SQL?

Может быть, используя курсор?

1 Ответ

2 голосов
/ 16 января 2012

Вы уверены , что хотите вставить новую строку?Или просто сможете рассчитать этот промежуточный итог при запросе данных?

Версия запроса

SELECT
  Year,
  Line,
  SUM(January)      AS January,
  SUM(February)     AS February,
  ...
  SUM(December)     AS December
FROM
  yourTable
GROUP BY
  Year,
  Line
WITH
  ROLLUP
ORDER BY
  Year,
  Line

Вставить версию

Если вы только один уровень резюме, удалите WITH ROLLUP

INSERT INTO
  yourTable
SELECT
  Year,
  NULL,
  SUM(January)      AS January,
  SUM(February)     AS February,
  ...
  SUM(December)     AS December
FROM
  yourTable
GROUP BY
  Year
WITH
  ROLLUP

РЕДАКТИРОВАТЬ Следовать за редактированием вопроса

Я настоятельно рекомендую вам иметь в виду запрос, а не изменение фактических данных.Я также предлагаю вам построить эти строки в вашей среде отчетности или поместить значения% справа от каждой записи ...

SELECT
  this_year.Year,
  this_year.Line,
  this_year.January,
  CAST(this_year.January AS DECIMAL(8,2)) / CAST(last_year.January AS DECIMAL(8,2)) AS January_Change,
  ...
FROM
  yourTable   AS this_year
LEFT JOIN
  yourTable   AS last_year
    ON  last_year.year = this_year.year-1
    AND last_year.line = this_year.line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...