2014-09-23 43 views
2

我想建立一個表是這樣的:雙表格加入電網具有鮮明行

簡要
所有從兩個表中的列。
按DISTINCT日行排序。
總計每天的所有到期付款NAEDO
總結所有成功/不成功的付款每天。 paysoft
總所許爲天
總傑出的一天

enter image description here

兩個表在這個網格表示。

你會有[NAEDO]付款,你必須做出支付/或失敗[paysoft]

每天都有多筆交易和電網由一天,該行中總結了幾天的交易組合。

FIDDLE與測試數據

我已經嘗試了一下,但林奮力加入兩個表。

SELECT 
    n.day, 
    n.ACCOUNTS, 
    ammount 
FROM 
(
    SELECT DISTINCT start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount 
    FROM NAEDO 
    WHERE start_date >= '2014-08-13' AND start_date <= '2014-09-12' 
    GROUP BY start_date 
    ORDER BY start_date 
) n 
LEFT JOIN 
(
    ???? 
) ps ON ps. = ps.custno 
GROUP BY start_date, n.day, n.ACCOUNTS, ammount 
ORDER BY start_date 

所以這個查詢(沒有第二個空白的)創建行並輸入當天到期的金額和當天應付的金額。
但嘗試加入表格會丟失我的DISTINCT選擇

請幫助或引導我取得結果。

+1

你能讓我們知道你在嘗試什麼?部分,以及它給你的東西。另外,你想從加入中看到什麼其他值,基本上你的目標是什麼。 – Arun 2014-09-23 14:33:40

回答

0

如果我正確讀取所需的表格,則不需要DISTINCT,並且您的連接條件錯誤。看起來你試圖根據客戶號碼加入,但你對此不感興趣。相反,您需要加入日期(n.start_date = ps.pay_date)。我更新了一下你的代碼,以顯示我認爲你希望你的加入工作。

SELECT 
    n.day, 
    n.ACCOUNTS, 
    n.ammount, 
    ps.amt_paid 
FROM 
(
    SELECT start_date, extract(day from start_date) as day, count(*)as ACCOUNTS, sum(amount)as ammount 
    FROM NAEDO 
    WHERE start_date >= '2014-07-13' AND start_date <= '2014-08-12' 
    GROUP BY start_date 
    ORDER BY start_date 
) n 
LEFT JOIN 
(
    Select pay_date, sum(amount) as amt_paid 
    From paysoft 
    Group By pay_date 
    Order By pay_date 
) ps On n.start_date = ps.pay_date 
Order By n.start_date 

這並不在邏輯因素來確定是否成功率,也不會從amt_paid排除失敗的付款,但它應該讓你開始。以這種方式構建查詢也會導致計算您的賬戶數量時出現問題。如上所述,它僅計算在特定日期付款的帳戶數量。它可以很容易地更改爲還包括在特定日期付款的帳戶,但是您可能會將一些帳戶計入兩次。