Попытка создания полей на основе case case
У меня возникли проблемы с запросом ниже. Я пытаюсь определить, является ли поле категории «A», «B» или «C», а затем создайте поле, основанное на категории. Это поле подвело бы поле платежей. Но я столкнулся с ошибкой, говоря «неправильный синтаксис рядом с ключевым словом As». Я создаю это в представлении SQL. Использование SQL Server 2008
SELECT r.id, r.category CASE WHEN r.category = 'A' then SUM(r.payment) As A_payments WHEN r.category = 'B' then SUM(r.payment) As B_payments WHEN r.category = 'C' then SUM(r.payment) As C_payments END FROM r_invoiceTable As r GROUP BY r.id, r.category
У меня есть данные, где все вышеуказанные случаи должны выполняться, потому что данные, которые у меня есть, имеют A, B и C
Пример Data-r_invoiceTable
- Внутреннее соединение BETWEEN двух значений
- Оптимизация «начинается с» сравнения в SQL Server
- Объединение нескольких строк в SQL с привязкой к первичному ключу
- Рекурсивный самостоятельный запрос со связанными таблицами (SQL Server)
- Как вы присоединяетесь к таблицам из двух разных экземпляров SQL Server в одном запросе SQL
Id --- Category ---- Payment 222 A ---- 50 444 A ---- 30 111 B ---- 90 777 C ---- 20 555 C ---- 40
Желаемый результат A_payments = 80, B_payments = 90, C_payments = 60
- Что такое синтаксис T-SQL, чтобы исключить дубликат столбца на выходе при объединении двух таблиц?
- Включение повышения производительности таблицы индекса
- Возвращает выбранные строки в соответствии с максимальным значением без дублирования с использованием MS SQL
- Вычисленная колонка (COALESCE vs CASE vs ISNULL)
- SQL - объединение двух разных таблиц по имени без дубликатов
- Требуется решение для сложного SQL-запроса
- Что делать, если индексируемый столбец является типом данных nvarchar в SQL Server?
- Sql-запрос с объединениями между четырьмя таблицами с миллионами строк
Возможно, вы ищете это:
SELECT SUM(CASE WHEN category = 'A' THEN payment END) AS A_payments, SUM(CASE WHEN category = 'B' THEN payment END) AS B_payments, SUM(CASE WHEN category = 'C' THEN payment END) AS C_payments FROM r_invoiceTable
Может быть, вы хотите, чтобы это (сумма оплаты по категориям) ?:
SELECT r.category, SUM(r.payment) As Payments FROM r_invoiceTable As r GROUP BY r.category
Результат будет выглядеть следующим образом:
category Payments --------- ------------ A 80 B 90 C 60
Если вам нравятся эти цифры в одной строке, это наивный подход:
SELECT (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'A') as A_Payment, (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'B') as B_Payment, (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'C') as C_Payment
SELECT * FROM dbo.r_invoiceTable PIVOT ( SUM(payment) FOR category IN ([a],[b],[c]) ) AS pivoted