SQL新手,瞭解基本查詢,試圖寫出比我的知識稍高一些的東西,並且如果有人能夠提供它,需要一些幫助。我已經嘗試過使用模板代碼並根據我的需要進行剪裁,但沒有成功。SQL,發票聲明,當前和過去的會費
我正在處理1個表格,並嘗試獲取查詢以顯示客戶當前的0-30天餘額以及30-60,60-90,90-120,120天以上的任何過期日期。
table: c_inv_h
columns: comp_code, cust_code, inv_num, inv_date, inv_tp, inv_amt, inv_tax1, inv_tax2
例如數據
comp_code, cust_code, inv_num, inv_date, inv_tp, inv_amt, inv_tax1, inv_tax2
M1, 100068, 1, 2016-08-11, RCPT, 103.48, 4.5, 8.98
M1, 100068, 2, 2016-07-11, RCPT, 103.48, 4.5, 8.98
M1, 100068, 3, 2016-06-11, RCPT, 103.48, 4.5, 8.98
M1, 200027, 4, 2016-05-11, RCPT, 103.48, 4.5, 8.98
M1, 200027, 5, 2016-04-11, RCPT, 103.48, 4.5, 8.98
我想讓查詢顯示:
comp_code, cust_code, CurrentBalance, 30-60, 60-90, 90-120, 120+
M1, 100068, 116.96, 233.92, 0, 0, 0
M1, 200027, 0, 233.92, 0, 0, 0
M1, 200027, 0, 0, 0, 0, 233.92
我到目前爲止已經試過
SELECT comp_code, cust_code, inv_num, inv_date, sum(inv_amt) + sum(inv_tax1)
+ sum(inv_tax2) as InvoiceTotal,
DATEDIFF(day, inv_date, sysdate as Numberofdays, 'CurrentBalance' =
CASE WHEN DATEDIFF(day,inv_date, sysdate < 30 then InvoiceTotal END,
'30_days' = CASE WHEN DATEDIFF(day, inv_date, sysdate between 30 AND 60
Then InvoiceTotal WHEN DATEDIFF(day, inv_date, sysdate > 90 Then
InvoiceTotal END
FROM c_inv_h
WHERE comp_code='M1'
GROUP BY comp_code, cust_code
這可能是遙遠從我試圖實現,但我試着克通過它。
非常感謝提前!
Alan歡迎來到stackoverflow!你有一個好的開始你的問題,但也應該包括你想要的結果是基於你的示例數據,並告訴我們你已經嘗試過的東西。不要擔心,如果它是失敗或不起作用,它只是幫助我們知道我們正在幫助你不爲你做,並可以產生一些額外的洞察你想要的邏輯。 – Matt
感謝馬特。我編輯了我的帖子。 –
您可以使用條件聚合來創建像這樣的數據透視表。但取決於哪個數據庫/ rdbms(sql-server,oracle,mysql)可能有一些其他選項可用於您使用的是什麼系統?也可以在你想要查詢的內容中放置一行daa,它可以幫助人們更好地形象化 – Matt