2012-01-16 2 views
2

У меня есть следующая таблица:Как вставить промежуточную строку?

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?

Возможно использование курсора?

+0

Если вы отправляете код, XML или ** данные образца **, * * ПОЖАЛУЙСТА ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

+1

Это то, что вам не следует делать в T-SQL - используйте инструмент отчетности (например, службы Reporting Services) или обработайте его в своем внешнем приложении - * not * в базе данных! –

+0

Я ответил перед твоим правлением. Как выглядит итоговая строка, когда у вас есть 3 года данных? И поскольку это разные типы данных (INT, а затем проценты [float или decimal?]), Вы имеете в виду запрос, а не вставку? – MatBailie

ответ

2

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

Запрос версии

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 


EDIT Следуйте за вопросом edit

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

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 
Смежные вопросы