1

(1) 営業担当者、(2) 営業担当者の 2 つのテーブルを指定して、クエリを作成しようとしています。販売員が持ち込んだ ID、名前、および売上高が表示されます。問題は、持ち込まれたお金のIDと合計を取得できることですが、名前を追加する方法がわかりません。さらに、私の試みでは、何も販売していない販売員が省略されています。これは残念です。

詳細に:

単純なテーブルが 2 つあります。

create table Salespersons (
    id integer,
    name varchar(100)
);

create table Sales (
    sale_id integer,
    spsn_id integer,
    cstm_id integer, 
    paid_amt double
);

営業担当者ごとに、持ち込まれた売上の合計を表示するクエリを作成したいと考えています。

このクエリが思い浮かびます:

select spsn_id, sum(paid_amt) from Sales group by spsn_id

このクエリは、ID と持ち込まれた合計金額のリストのみを返しますが、販売員の名前は返さず、何も販売していない販売員は省略します。

Salespersons テーブルの各販売員について、ID、名前、売上の合計を出力するクエリを作成するにはどうすればよいですか。まったく販売していない場合は 0 です。

どんな助けにも感謝します!

お早めにどうぞ!

4

3 に答える 3

3

これを試して:

SELECT sp.id,sp.name,SUM(NVL(s.paid_amt,0))
FROM salespersons sp
LEFT JOIN sales s ON sp.id = s.spsn_id
GROUP BY sp.id, sp.name

LEFT JOIN は、売上がない場合でも販売員を返します。

THE NVLは、そのユーザーの販売がない場合は常に 0 を返します。

于 2013-11-12T19:26:58.480 に答える
1

以下を試してください

select sp.id, sp.name, sum(s.paid_amt)
  from salespersons sp
  left join sales s
    on sp.id = s.spsn_id
 group by sp.id, sp.name
于 2013-11-12T19:26:25.880 に答える
0

またはこれを試してください:

with t as
(select spsn_id, sum(paid_amt) as totamt
  from Sales 
  group by spsn_id 
)
select sp.id, sp.name, coalesce( t.totamt, 0 )
  from salespersons sp
  left join t  ON sp.id = t.spsn_id

(理論的には)結合前にグループ化を行うため、時間を節約できます。

ここで Coalesce は NVL と同じことを行いますが、より移植性があります。

于 2013-11-13T00:31:39.900 に答える