0

私は2つのテーブルを持っています

レジストリ

ClientID  Name  Incube
----------------------
1         Joe    as
2         Jack   gt
3         Jor    ee

デポジット

DepositID  ClientID Quantum
----------------------------
1                1    100.45 
2                1    34.5
3                1    22.0
4                2    1000.0

私は1つの結果だけを取得したい.

最初に2つのクエリを実行していました

SELECT [Name],[Incube] FROM Registry WHERE [ClientID] = 1;
SELECT DISTINCTROW Sum([Deposit].[Quantum]) As Total FROM Deposit WHERE [ClienteID] = 1;

次に、すべてをより簡単にするために左結合を行いました

SELECT 
[a].[ClientID],
[a].[Name],
[a].[Incube],
Sum([b].[Quantum]) as Total
FROM Registry a
LEFT JOIN Deposit b 
ON a.ClientID=b.ClientID 
group by a.Name, a.ClientID, a.Incube;

WHERE 句をフィルタリングするにはどうすればよいですか? ClientID=1 のすべてのデータを取得したいのですが、すべてではありません。ここでの問題は、すべての clientID ではなく、必要な ClientID のみを計算する方法です。

4

2 に答える 2

2

WHERE何か不足していない限り、次の句を追加するだけです。

SELECT 
  [a].[ClientID],
  [a].[Name],
  [a].[Incube],
  Sum([b].[Quantum]) as Total
FROM Registry a
LEFT JOIN Deposit b 
  ON a.ClientID=b.ClientID 
where a.clientid = 1
group by a.Name, a.ClientID, a.Incube;

デモで SQL Fiddle を参照してください

結果は次のとおりです。

| CLIENTID | NAME | INCUBE |  TOTAL |
-------------------------------------
|        1 |  Joe |     as | 156.95 |
于 2012-12-21T23:33:11.043 に答える
1

あなたの目的のために、左結合はまったく必要ありません。一致しない列も必要な場合にのみ使用してください。単に内部結合で十分です。

select r.ClientID,r.Name,r.Incube,nvl(sum(d.Quantum),0) as quantum
from Registry r,Deposit d where r.clientId=d.clientID 
and r.clientID=1
group by r.clientID,r.Name,r.Incube;

SqlFiddleデモ

于 2012-12-22T00:42:52.253 に答える