Sql-Server-2005

左表中的所有行以及右表中的金額總和

  • August 7, 2015

我正在嘗試返回上週的客戶列表和他們的交易總和,但是讓查詢返回根本沒有下注的客戶。我正在嘗試使用左連接來執行此操作,但是如果客戶下注,查詢只會返回一行,這不是我期望左連接起作用的方式。我能做些什麼來使這項工作按我想要的方式工作?

select i.accountnumber, i.firstname, i.lastname, sum(a.amount)
from accountinformaton i 
left join accountactivity a 
   on i.accountnumber = a.accountnumber
where a.transactiontype = 'Bet' 
 and a.transactiondate >='2015-07-31'
group by i.accountnumber, i.firstname, i.lastname

‘accountinformation’ 表有數千行,上面的查詢返回幾百行。我期望能夠從“accountinformation”返回所有行,並且在沒有下注的賬戶上總和為空。

我自己想通了。我的 where 子句告訴 sql 只顯示“Bet”並具有該日期條件的行,所以在我沒有意識到的情況下,我告訴 sql 向我顯示有下注的行。

這是我的替代查詢…

select i.accountnumber, i.firstname, i.lastname, sum(isnull(amount,0))
from accountinformation i 
left join accountactivity a 
   on i.accountnumber = a.accountnumber 
  and a.transactiondate >='2015-07-31' 
  and a.transactiontype = 'Bet'
group by i.accountnumber, i.firstname, i.lastname

將條件放在 join 子句而不是 where 子句中會使左連接按預期執行。

引用自:https://dba.stackexchange.com/questions/109338