2013-10-23 40 views
0

我有一個包含交易日期,交易總額和信用卡ID的交易表。我將此交易表加入具有信用卡ID和信用卡類型的卡類型表格中 - 此表格僅包含4行,包括Visa,Master Card,Discover和American Express的信用卡類型。返回一行,在加入時不存在的行

我想查看所有交易日期,總計和信用卡類型的每個日期和地點,但我希望所有日期和信用卡類型都能返回,即使沒有使用特定信用卡類型進行交易(即,即使沒有使用維薩信用卡進行的交易,我也希望4行能夠在9月1日返回)。

右連接不起作用,因爲所有4種信用卡類型都在不同的日期使用。有任何想法嗎?

+0

使用'左外部連接'。 – Barmar

回答

0

你需要使用一個子查詢,返回所有的交易日期和信用卡類型的交叉產品,然後LEFT JOIN與交易:

SELECT c.txn_date txn_date, card_type, SUM(txn_total) daily_total 
FROM (SELECT card_id, card_type, txn_date 
     FROM cardtype 
     JOIN (SELECT DISTINCT txn_date FROM transaction) t) c 
LEFT JOIN transaction t 
ON t.card_id = c.card_id AND t.txn_date = c.txn_date 
GROUP BY c.card_id, txn_date 
ORDER BY txn_date, card_type 

SQLFIDDLE

+0

是否選擇card_id,card_type,txn_date FROM cardtype JOIN(SELECT DISTINCT txn_date FROM transaction)t缺少它加入的內容?我需要將cardtypeid添加到事務中的select txn_date .... – user2912412

+0

它沒有加入任何事情,它創建了一個完整的交叉產品。 – Barmar

+0

好吧,但是當我試圖運行它時,由於附近的語法不正確而出現錯誤)。 – user2912412