【发布时间】:2018-05-12 00:54:42
【问题描述】:
我有一张如下所示的表格:
+--------+----------+--------+------------+-------+
| ID | CHANNEL | VENDOR | num_PERIOD | SALES |
+--------+----------+--------+------------+-------+
| 000001 | Business | Shop | 1 | 40 |
| 000001 | Business | Shop | 2 | 60 |
| 000001 | Business | Shop | 3 | NULL |
+--------+----------+--------+------------+-------+
随着时间的推移,ID、CHANNEL 和 VENDOR 和 sales 记录的组合有很多 (num_PERIOD)。
想法是获取一个新列,该列返回SALES 列中的NULLS 数,但根据num_PERIOD 列在前111 个寄存器中。
我一直在尝试这样的事情:
SELECT ID,
CHANNEL,
VENDOR,
sum(CASE
WHEN SALES IS NULL THEN 1
ELSE 0
END) OVER (PARTITION BY ID,
CHANNEL,
VENDOR
ORDER BY num_PERIOD ROWS BETWEEN UNBOUNDED PRECEDING AND 111 FOLLOWING) AS NULL_SALES_SET
FROM TABLE
GROUP BY ID,
CHANNEL,
VENDOR
但我没有得到我正在寻找的东西。
所以要得到一个类似的表:
+--------+--------------+--------+----------------+
| ID | CHANNEL | VENDOR | NULL_SALES_SET |
+--------+--------------+--------+----------------+
| 000001 | Business | Shop | 1 |
| 000002 | Business | Market | 0 |
| 000002 | Non Business | Shop | 3 |
+--------+--------------+--------+----------------+
在选择ID、CHANNEL 和 VENDOR 按num_PERIOD 排序的前 111 行时遇到困难。
【问题讨论】:
标签: sql sql-server window-functions partition