【发布时间】:2015-06-12 09:31:07
【问题描述】:
我需要一些帮助来解决一个问题。我在 SQL SERVER 2012 工作。基本上是这样的:
客户可以购买三种产品:
- 一个
- B
- C
如果客户在同一天,我们应该将其显示为“Dual”。
如果客户在同一天只购买了一件产品,那么我们应该称其为“单件”。
如果客户在同一天购买了所有三种产品,我们应该称之为“Triple”。
这是我的数据目前的样子:
YearMonth Product CustomerNr Sales Date
201505 B 70056844 20150501
201505 A 70056844 20150501
201505 B 70057297 20150503
201505 A 70057494 20150504
201505 B 70057494 20150504
201505 C 70057494 20150504
201505 B 70033055 20150506
201505 B 36021632 20150508
201505 A 70060612 20150508
201505 C 70060612 20150508
正如我们在示例数据中看到的,客户编号:70060612 在同一销售日期购买了两种产品 A 和 C,因此我们可以说他购买了双包装。客户编号:70057494 在同一销售日期购买了 3 种产品,A、B 和 C。我们可以称之为 Triple。
我希望我的数据包含这样的列:
YearMonth Product CustomerNr Sales Date Package
201505 B 70056844 20150501 Dual
201505 A 70056844 20150501 Dual
201505 B 70057297 20150503 Single
201505 A 70057494 20150504 Triple
201505 B 70057494 20150504 Triple
201505 C 70057494 20150504 Triple
201505 B 70033055 20150506 Single
201505 B 36021632 20150508 Single
201505 A 70060612 20150508 Dual
201505 C 70060612 20150508 Dual
我该怎么做?我正在考虑做一些类似的事情
Test=COUNT(*) OVER (PARTITION BY CustomerNr)
【问题讨论】:
-
有一个“教科书示例”,使用您提到的方法。 MSDN 看例子B。
标签: sql sql-server sql-server-2012 window-functions