我对此查询有些困难,我基本上不确定这样的事情是否可能一次性完成。
TBL1
RefNum ClientID SWID
1 17 79
3 17 90
18 23 88
34 18 88
56 34 90
TBL2
SWID SCity
79 Syracuse
90 Elmond
88 Albureque
在tbl1中,我可以拥有多个具有独特RefNum的ClientID记录 - 因为这是主键;自动递增。
我只希望能够为每个clientID选择TOP 1(每个客户端只有一条记录)。此外,我希望使用SWID加入tbl2以获取 SCity 。
我希望它最终看起来像这样(一厢情愿)我甚至不知道这是否可以通过一个查询
Count City
1 Syracuse
2 Elmond
1 Albureque
我只有Albureque的Count = 1的原因是,对于Albureque(SWID = 88),同一客户端出现2(clientID = 17)。在这种情况下,我只计算一次。
我有大约480000条记录,我基本上需要一个摘要报告,它将显示SCity的未重复的ClientID的计数。任何帮助将不胜感激。
编辑:
RefNum ClientID SWID
1 17 79
2 17 79
18 23 79
3 17 90
87 17 88
期望的最终结果
Count City
2 Syracuse (79)
1 Elmond (90)
1 Albureque (88)
所以基本上Client 17有两个相同SWID(79)的实例,所以我们只把它算作一个。但客户17还有另一个SWID 90和88的记录,在这种情况下,我们仍然希望将记录计为90和88的1。
Syracuse有2,因为客户17有Syracuse(79),而Client 23也有Syracuse - 因为客户17有2条记录,我们把它们卷成1 + 1(客户23)= 2。
偶数转折部分是SWID有时可能不同,但实际城市是相同的。因此,例如ClientID = 9可以具有SWID = 109和SWID = 198,但是在tbl2中 - SCITY在两种情况下都是旧金山。原因是tbl2实际上不是参考表,SWID实际上与社区人员相关联,社区人员可能位于同一个城市但只是位于不同的办公室。所以SWID = 109是旧金山的John Doe,SWID = 198也是旧金山的Jane Smith。
答案 0 :(得分:2)
我认为您需要join
和count(distinct)
:
select t2.scity, count(distinct t1.clientId)
from tbl1 t1 join
tbl2 t2
on t1.swid = t2.swid
group by t2.scity;