【发布时间】:2009-10-05 22:17:13
【问题描述】:
有一个叫Orders的表有三列:
订单ID
用户ID
订单日期
我需要知道,在过去的 X 个月里,A 用户下了 1 个订单,B 用户下了 2 个订单,C 用户下了 3 个订单,等等。
所以输出是一个带有 MinDate 字段的表格,然后是从 1 到 N 的每个订单的列,例如:
declare @t table (
MinDate datetime,
o_1 int,
o_2 int,
o_3 int,
o_4 int,
...
o_N int
)
每个字段都包含在 MinDate 和当前日期之间下达这么多订单的唯一客户(用户 ID)的数量。例如,如果某行的 MinDate = '2009-09-01',则 o_6 包含从 9 月 1 日至今下达 6 次订单的客户数量,等等。
我尝试了几种方法,将 LEFT JOIN 订单添加到数字表等,但无法将正确的唯一用户计数添加到每列中。我可以使用 CURSOR 轻松(且缓慢)地做到这一点,但这似乎是作弊。
有什么建议吗?如果我的解释没有意义,请告诉我...
【问题讨论】:
-
是的,我知道如何使用 PIVOT 但不会处理此类查询
-
您能提供实际的查询吗?
-
这听起来更像是 OLAP 查询而不是 OLTP
-
实际查询?这就是问题的重点......我需要帮助编写查询,是的,我可以使用 MDX 来编写查询,但是(a)我仍然会遇到相同的行内计算问题,并且(b)我需要这样做这在 SQL 中
标签: sql sql-server tsql