Сумма строк в столбцах

#sql #sql-server #tsql

Вопрос:

У меня есть таблица, как показано ниже, с (ИДЕНТИФИКАТОР, ДАТА, Категория, цена) в виде столбцов

введите описание изображения здесь

Я хотел бы получить результат, как показано ниже.

введите описание изображения здесь

Не могли бы вы, пожалуйста, помочь мне?

Спасибо

Комментарии:

1. Это простая совокупность, использующая «сумму (в случае, когда категория в ( .. ), то цена еще 0) как …»

2. Обычный, Бонусный, Другой-это не колонка. они исходят из столбца Категория …

3. Нет — вы БУДЕТЕ группироваться по дате и идентификатору. Единственная умеренно сложная часть-это использование выражения case для суммирования значения.

4. эта таблица содержит 10 миллиардов строк с данными за 25 лет

5. В соответствии с руководством по вопросам, пожалуйста, не размещайте изображения кода, данных, сообщений об ошибках и т.д. — Скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста. И, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или где-либо еще) и почему это не отвечало вашим потребностям.

Ответ №1:

Вы можете использовать условную группировку, как указано ниже. вы можете использовать предложение IN, чтобы упростить код.

 SELECT ID, DATE, 
SUM(CASE WHEN Category IN ('R','F') THEN Price ELSE 0 END) AS Regular,
SUM(CASE WHEN Category IN ('B','C') THEN Price ELSE 0 END) AS Bonus,
SUM(CASE WHEN Category IN ('K','W','O','OW') THEN Price ELSE 0 END) AS Other 
FROM TableName
GROUP BY ID, DATE
 

Комментарии:

1. Спасибо, что проверили это сейчас

Ответ №2:

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

Комментарии:

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

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

Ответ №3:

Попробуйте это (еще не тестировали):

     select ID, Date, 
    sum((case when Category = 'R' then Price)   (case when Category = 'F' then Price)) as 'Regular (R F)',
    sum((case when Category = 'B' then Price)   (case when Category = 'C' then Price)) as 'Bonus (B C)',
    sum((case when Category = 'K' then Price)   (case when Category = 'W' then Price) 
          (case when Category = 'O' then Price)   (case when Category = 'OW' then Price)) as 'Other (K W O OW)'
    from t
    group by Date;
 

Комментарии:

1. у вас там пара синтаксических ошибок. CASE без END . ID не в GROUP BY