#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица со следующими данными:
Имя | Оценка |
---|---|
A | 2 |
B | 3 |
A | 1 |
B | 3 |
Мне нужен запрос, который возвращает следующий вывод.
Имя | Оценка |
---|---|
A | 2 |
A | 1 |
Промежуточный итог: A | 3 |
B | 3 |
B | 3 |
Промежуточный итог: B | 6 |
Я могу получить «Промежуточный итог» с group by rollup
помощью запроса, но я хочу получить промежуточный итог вместе со значением столбца группы.
Пожалуйста, помогите мне с некоторым кодом SQL
Ответ №1:
Если score
имеет не более одного значения для name, you can use
ГРУППИРУЮЩИХ НАБОРОВ `:
select name, sum(score) as score
from t
group by grouping sets ((name, score), (name));
Если name
никогда null
, я бы просто использовал:
coalesce(name, 'Grouping ' name)
В противном случае вам нужно использовать grouping()
.
Комментарии:
1. Этот запрос выдаст несколько групп, но я хочу значение группы в строке промежуточного итога.
2. @Hardik Изменить
select name
наselect case when GROUPING_ID(name, score) = 1 then 'subtotal: ' name else name end