我有一个交易表,其中包含三列:transactionType,amount和transactionTimestamp。 transactionType列接受1(现金),2(支票)或3(信用卡)的值。SQL从同一个表中选择多个
我需要显示每个transactionType每天的总金额。我可以为每个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));
但是,这只会导致“子查询返回多个值”错误。而我的感觉并不是它应该怎么做。感谢您的任何建议。
编辑:我要澄清一点,我试图输出结果如下所示:
----------------------------------------------------
cashTotal | checkTotal | cardTotal | transactionDay
----------------------------------------------------
1000 | 1000 | 1000 | date
0 | 500 | 0 | date
----------------------------------------------------
每行显示每个TRANSACTIONTYPE该日期的总量。
编辑:一些细节编辑删除敏感信息。
为什么不使用'CASE..WHEN'? – MusicLovingIndianGirl
你在找'UNION'吗? – jleach
请勿肆意破坏或污损你的帖子。 –