2016-02-25 19 views
0

我想從兩個表中獲取數據,數據顯示:我應該怎麼寫查詢從兩個表像

+----+------+ 
| id | name | 
+----+------+ 
| 1 | John | 
| 2 | Alex | 
| 3 | Able | 
| 4 | Ash | 
+----+------+ 

+------+------+ 
| name | sale | 
+------+------+ 
| John | 100 | 
| Alex | 200 | 
| Able | 300 | 
| Able | 100 | 
| Alex | 500 | 
+------+------+ 

檢索1表和第二個表的銷售總和所有代理的名稱。如果有任何用戶銷售不存在,那麼它必須給我零值或零值。

The output is something like shown in image.

回答

1

要在沒有銷售的,你可以使用一個左外連接的情況下返回空值。

SELECT 
     agent.name 
    , SUM(sale) AS totalSales 
FROM 
    agent 
    LEFT OUTER JOIN sale ON agent.name = sale.name 
GROUP BY 
     agent.name 

如果您希望值爲零,你可以使用

SELECT 
     agent.name 
    , COALESCE(SUM(sale),0) AS totalSales 
FROM 
    agent 
    LEFT OUTER JOIN sale ON agent.name = sale.name 
GROUP BY 
     agent.name 
+0

是的,它的工作 –

+0

我想要更多的幫助來使用這個查詢應用在datalist。我使用bellow代碼:string str =「SELECT Agent.name,COALESCE(SUM(TotalSale),0)AS totalSales FROM Agent LEFT OUTER JOIN NewSales ON Agent.Name = NewSales.Agent GROUP BY Agent.Name」; SqlCommand cmd = new SqlCommand(str,conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); DataList1.DataSource = ds; DataList1.DataBind(); conn.Close(); –

+0

我不確定我是否明白你確切的問題是什麼,因爲你沒有指定。但是,除此之外,在您發表評論的片段中,應該使用SqlDataAdapter da = new SqlDataAdapter(cmd);實際上是SqlDataAdapter da = new SqlDataAdapter(str,cmd);? –

0

你可能想使用左連接聚結或ISNULL功能,因爲你想在每一個銷售人員一排你的結果。所以,如:

SELECT a.name, SUM(s.sale) 
FROM Agent a 
LEFT JOIN Sale s on a.name = s.name 
GROUP BY a.name