台灣最大程式設計社群網站
線上人數
1946
 
會員總數:246046
討論主題:189632
歡迎您免費加入會員
討論區列表 >> MS SQL >> SQL 如何LEFT JOIN 同一個TABLE 不同條件?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL 如何LEFT JOIN 同一個TABLE 不同條件?
價值 : 50 QP  點閱數:456 回應數:3
樓主

pkko
門外漢
0 29
580 64
發送站內信

各位大大好,想請教如何下SQL 語法的問題
A表:
ID,姓名
1,邱先生
2,黃先生
3,陳先生

B表:
ID,金額,結清與否,日期
1,100,FALSE,2019/1/1
1,100,TRUE,2020/1/1
2,100,FALSE,2019/1/1
2,100,TRUE,2020/1/
3,100,FALSE,2019/1/1

預期結果
姓名(用ID比對),金額(不管結清與否,直接以id加總),日期(只抓取結清與否為TRUE的日期)
邱先生,200,2020/1/1
黃先生,200,2020/1/1
陳先生,100,NULL

請問這樣的預期結果要如何下語法?(主要是日期只抓取結清欄位為TRUE的日期,同時又要以ID相同的加總金額)
這兩個混在一起
不知道該如何下語法...




搜尋相關Tags的文章: [ SQL ] , [ SUM ] , [ LEFT JOIN ] ,
本篇文章發表於2020-01-14 12:25
== 簽名檔 ==
努力!努力!再努力!!!
1樓
最有價值解答

P陳
檢舉此回應
試試以下子查詢的寫法

SELECT A.ID, A.姓名, Sum(B.金額) AS 金額之總計, First((select max(日期) as maxD from B where Id=A.id and 結清=true)) AS 最後繳款日
FROM A INNER JOIN B ON A.ID = B.ID
GROUP BY A.ID, A.姓名;
本篇文章回覆於2020-01-14 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

pkko
檢舉此回應
非常感謝已經成功解決此問題
但我必須要把前面的first()這些都刪除才可以
請問這個用途是甚麼?
本篇文章回覆於2020-01-14 18:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
First((select max(日期) as maxD from B where Id=A.id and 結清=true)) AS 最後繳款日 <--- 這個叫子查詢
算是進階用法 需要深一點點的功力 會用的話很好用
本篇文章回覆於2020-01-15 08:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.