У меня есть таблица транзакций, которая включает три столбца: transactionType, amount и transactionTimestamp. Столбец transactionType принимает значения 1 (наличные), 2 (чеки) или 3 (кредитные карты).SQL Множественный выбор из той же таблицы
Мне нужно показать общую сумму каждой транзакции. Тип в день. Я могу сделать это, используя отдельные запросы для каждого transactionType легко:
SELECT SUM(amount) AS cashTotal, dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp)) AS transactionDay
FROM TransactionRecords
WHERE transactionType = 1
GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp));
SELECT SUM(amount) AS checkTotal, dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp)) AS transactionDay
FROM TransactionRecords
WHERE transactionType = 2
GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp));
SELECT SUM(amount) AS cardTotal, dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp)) AS transactionDay
FROM TransactionRecords
WHERE transactionType = 3
GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp));
Но что мне нужно сделать, чтобы сделать это в одном запросе. Я попытался комбинируя выше в одну, как показано ниже:
SELECT
(SELECT SUM(amount) FROM TransactionRecords WHERE transactionType = 1 GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp))) AS cashTotal,
(SELECT SUM(amount) FROM TransactionRecords WHERE transactionType = 2 GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp))) AS checkTotal,
(SELECT SUM(amount) FROM TransactionRecords WHERE transactionType = 3 GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp))) AS cardTotal,
dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp)) AS transactionDay
FROM TransactionRecords
GROUP BY dateadd(DAY, 0, datediff(DAY, 0, transactionTimestamp));
Но это только приводит к «подзапрос возвращает более чем 1 значение» ошибка. И я чувствую, что это не так, как это должно быть сделано в любом случае. Спасибо за любой совет.
EDIT: Я хотел уточнить немного, что я пытаюсь вывода результатов, как следующее:
----------------------------------------------------
cashTotal | checkTotal | cardTotal | transactionDay
----------------------------------------------------
1000 | 1000 | 1000 | date
0 | 500 | 0 | date
----------------------------------------------------
Каждая строка показывает общее количество каждого transactionType для этого конкретного дня.
EDIT: некоторые детали отредактированы для удаления конфиденциальной информации.
Почему вы не используете 'CASE..WHEN'? – MusicLovingIndianGirl
Вы ищете 'UNION'? – jleach
Просьба не обманывать и не испортить ваши сообщения. –