我有一個交易表,其中包含三列: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
請勿肆意破壞或污損你的帖子。 –