2014-12-17 3 views
0

У меня есть таблица со следующими:SQL Server 2008: Расчет суммы в новой строке (группа по)

CREATE TABLE #tableA (color varchar(10), ids int, scores int) 
INSERT INTO #tableA 
VALUES ('red', 1, 100), 
('red',2,100), 
('red',3,50), 
('blue',1,20), 
('blue',5,50) 

Я хочу, чтобы сумма баллов, группы по цвету. Ожидаемый результат:

color id scores 
red 1 100 
red 2 100 
red 3 50 
      SUM 250 (100+100+50) 
blue 1 20 
blue 5 50 
      SUM 70 (all blues) 

Благодаря

+0

Обычно это делается с помощью двух отдельных операторов: SQL используется для построения наборов результатов, а не для отображения их в отчете с итогами. Это будет задачей программного обеспечения для отчетов, например, SSRS. –

+1

Ну, на основе двух хороших ответов, я думаю, что я стою исправлено: \ –

ответ

2

Вы можете использовать GROUPING SETS для этого, хотя результаты не будут непосредственно в формате, который вы хотите:

SELECT color, 
     ids, 
     SUM(scores) Scores 
FROM #TableA 
GROUP BY GROUPING SETS((color,ids),(color)) 

Результаты:

╔═══════╦══════╦════════╗ 
║ color ║ ids ║ Scores ║ 
╠═══════╬══════╬════════╣ 
║ blue ║ 1 ║  20 ║ 
║ blue ║ 5 ║  50 ║ 
║ blue ║ NULL ║  70 ║ 
║ red ║ 1 ║ 100 ║ 
║ red ║ 2 ║ 100 ║ 
║ red ║ 3 ║  50 ║ 
║ red ║ NULL ║ 250 ║ 
╚═══════╩══════╩════════╝ 
+0

Есть ли способ псевдонимы 'null' с чем-то значимым, как' SubTotal' и т. Д. В SQL? – ZeExplorer

2

Использование ROllUP в Group by

SELECT * 
FROM (SELECT color, 
       ids, 
       Sum(scores)scores 
     FROM #tableA 
     GROUP BY color, 
        ids WITH rollup) a 
WHERE color IS NOT NULL 
     OR ids IS NOT NULL 
Смежные вопросы