2017-02-03 52 views
-2

我有兩個表payment_tbl和bill_tbl具有以下屬性獲得上個月的所有記錄在SQL Server中對於當月

payment_tbl (payment_ID int -> pk) 
bill_tbl (payment_ID int -> Fk 
     ,bill_IssueDate date 
     ,bill_status varchar 
     ,bill_amount type int 
     ) 

所以,如果我想知道哪些payment_ID有賬單狀態「沒有付款「,現在的月份是2017年2月我想知道在2017年1月沒有支付賬單。


我嘗試下面的查詢,但它返回我空列名

SELECT p.payment_ID 
     ,b.amount_To_Pay 
FROM bill_tbl AS b 
    INNER JOIN payment_tbl AS p 
     ON b.payment_id = p.payment_ID 
WHERE b.bill_status = 'Not Paid' 
    AND b.bill_IssueDate >= DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) 
    AND b.bill_IssueDate < DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 0, 0) 

回答

0

你需要看第一當前和以前的兩個月,你的範圍設置爲。 AS

select 
    p.payment_ID, 
    b.amount_To_Pay 
FROM 
    bill_tbl AS b 
    INNER JOIN payment_tbl AS p ON 
    b.payment_id = p.payment_ID 
WHERE 
    (b.bill_status = 'Not Paid') 
    and b.bill_IssueDate < DATEADD(month, DATEDIFF(month, 0, getdate()), 0) 
    and b.bill_IssueDate >= DATEADD(month, DATEDIFF(month, 0, dateadd(month,-1,getdate())), 0) 
+0

它回報我什麼都沒有,甚至我的帳單表有日期2/2/2017 12:00:00 AM這是一個月大 – mjunaid

+1

以及它現在是2月,所以上個月是一月.... @你說上個月你想要的mjunaid。 2/2/2017是不是一個月大,這是一天老 – scsimon

+0

ops,謝謝我得到解決方案 – mjunaid

0

應儘可能簡單 -

SELECT p.payment_ID 
    ,b.amount_To_Pay 
FROM bill_tbl AS b 
INNER JOIN payment_tbl AS p 
    ON b.payment_id = p.payment_ID 
WHERE b.bill_status = 'Not Paid' 
AND DATEDIFF(month, b.bill_IssueDate ,getdate()) = 1 

你還有別的錯誤,日期範圍是確定的,去掉一些在WHERE子句中,看看是否有其實是爲那些任何數據個月 - 我不認爲這是你的日期範圍

+0

爲什麼它返回我空表? – mjunaid

+0

這將只返回部分月份數據...不是上個月這是OP想要的整個月份 – scsimon

+0

@mjunaid - 我不知道,還有其他錯誤我想,是你想要的記錄實際上是狀態是否正確? – Cato

相關問題