【发布时间】:2021-09-15 20:08:41
【问题描述】:
我的表有以下数据:
| REF_NO | PRD_GRP | ACC_NO |
|---|---|---|
| ABC | 12 | 1234 |
| ABC | 9C | 1234 |
| DEF | AB | 7890 |
| DEF | TY | 9891 |
我正在尝试构建一个查询来汇总每个客户的帐户数量 - 产品组与此目的无关,因此我的预期结果是:
| REF_NO | PRD_GRP | ACC_NO | NO_OF_ACC |
|---|---|---|---|
| ABC | 12 | 1234 | 1 |
| ABC | 9C | 1234 | 1 |
| DEF | AB | 7890 | 2 |
| DEF | TY | 9891 | 2 |
我尝试使用窗口函数进行此操作:
SELECT
T.REF_NO,
T.PRD_GRP,
T.ACC_NO,
COUNT(T.ACC_NO) OVER (PARTITION BY T.REF_NO) AS NUM_OF_ACC
FROM TABLE T
但是,对于第一个客户 (ABC),返回的 NUM_OF_ACC 值是 2 而不是 1。该查询似乎只是计算每个客户的唯一行数,而不是根据需要确定帐户数。
我该如何解决这个错误?
链接到小提琴 - https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=83344cbe95fb46d4a1640caf0bb6d0b2
【问题讨论】:
-
不起作用。在这种情况下,它为所有客户引用返回 1,而不仅仅是上面示例中的那个 - 我希望它计算唯一帐号的数量并返回计数,而不考虑 PRD_GRP 值。
-
我添加了更多示例数据;道歉不是更清楚。不幸的是,实际数据在另一台笔记本电脑上,所以我无法根据需要添加 DDL+DML;(但我希望上述编辑有所帮助。
-
是的,我有。运气不好,因为它只是为每一行返回 1。
-
我正在尝试设置 DBFiddle...
-
@DaleK- 我添加了一个小提琴并将链接插入到我的问题中。如果你能看看就好了。谢谢!
标签: sql sql-server tsql aggregate-functions window-functions