0

我有两张桌子

登记处

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

我只想得到一个结果,这是注册表中的名称、Incube 以及该人所有存款的总和,所有这些都对应于某个 ClientID

首先我做了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;

如何过滤 de WHERE 子句?我想获取 ClientID=1 的所有数据,而不是全部,这里的问题是如何只计算必要的 ClientID 而不是所有的 clientsID?

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

出于您的目的,根本不需要 Left Join。仅当您还需要不匹配的列时才使用它。简单的内部连接就可以了,

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;

SqlFiddleDemo

于 2012-12-22T00:42:52.253 回答