作为我选择的一部分,我使用以下内容:
1 + FLOOR((ROW_NUMBER() OVER (ORDER BY Category, Id) - 1) / 100) AS SubGroup
将我的数据拆分为100个子组。我遇到的问题是子组可以包含多个类别。是否可以确保子组仅包含一个类别,即使子组中的行数小于100也是如此。我尝试使用PARTITION BY
,但这不起作用。
答案 0 :(得分:1)
最多100行分配给子组,而子组只分配给单个类别的行?
您可能需要采用两步法:
SELECT ...
-- start a new sub group for every category or after 100 rows
Sum(CASE WHEN rn MOD 100 = 1 THEN 1 ELSE 0 END)
Over (ORDER BY category, rn
ROWS Unbounded Preceding) AS SubGroup
FROM
(
SELECT ...
-- row number per category
Row_Number() Over (PARTITION BY Category ORDER BY Id) AS rn
FROM mytab
) AS dt