【发布时间】:2017-08-28 18:08:21
【问题描述】:
我在查询这个问题时遇到了一些困难,我基本上不确定这样的事情是否可以一次性完成。
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)
所以基本上客户端 17 有两个相同 SWID (79) 的实例,所以我们只将其算作一个。但是客户端 17 也有另一个 SWID 90 和 88 的记录,在这种情况下,我们仍然想将 90 和 88 的记录计为 1。
锡拉丘兹有 2 条,因为客户 17 有锡拉丘兹 (79),客户 23 也有锡拉丘兹 - 由于客户 17 有 2 条记录,我们将它们汇总为 1 + 1(客户 23)= 2。
更棘手的部分是 SWID 有时可能不同,但实际的城市是相同的。例如,ClientID = 9 的 SWID = 109 和 SWID = 198,但在 tbl2 中 - SCITY 在这两种情况下都是 SAN FRANCISCO。原因是 tbl2 实际上不是一个参考表,SWID 实际上与一个社区人员相关联,他可能位于同一个城市但只是不同的办公室。所以 SWID = 109 是旧金山的 John Doe,SWID = 198 也是旧金山的 Jane Smith。
【问题讨论】:
-
TOP 1 是否表示每个 clientID 的 RefNum 最小值的行?或者是否可以返回任何带有 clientID 的行,只要每个客户 ID 只有一行?
-
@Yunnosch 我们希望确保为每个城市单独展示客户。因此,如果它有 1 个城市 = 88 的记录,则显示为 1。然后,如果它有 2 个城市 = 90 的记录,则仍将其显示为 1。基本上,如果客户有 5 个不同城市的 1 条记录,我们希望将客户显示为五个城市各 1 个
-
ClientID 17 在 Syracuse (79) 和 Elmond (90) 中,而不是在 Albureque (88) 中,根据您上面的示例数据。
-
@FerdinandGaspar - 请参阅编辑!
标签: sql sql-server-2012 inner-join