2017-07-11 1 views
0

Dans le cadre de ma sélection J'utilise les éléments suivants:données divisées en sous-groupes homogènes teradata

1 + FLOOR((ROW_NUMBER() OVER (ORDER BY Category, Id) - 1)/100) AS SubGroup 

de diviser mes données en sous-groupes de 100. La question que j'ai est que peut contenir plus Sous-groupes de 1 Catégorie . Est-il possible de s'assurer que SubGroups ne contient qu'une seule catégorie même si le nombre de lignes est inférieur à 100 dans un sous-groupe. J'ai essayé d'utiliser PARTITION BY mais cela n'a pas fonctionné.

Répondre

1

Un maximum de 100 lignes affectées à un sous-groupe et à un sous-groupe uniquement des lignes d'une seule catégorie?

Vous avez probablement besoin d'une approche en deux étapes:

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