2017-09-05 11 views
0

Je veux agréger les données de plusieurs lignes dans ma table, mais si les valeurs en double sont là, je dois prendre une seule valeur.Expression régulière dans SAP hana

Example  
col1  col2 col3  col4  
abc  abc  abc  abc  
abc  abc  abc  bcd  

alors je fais un groupe par col1, col2 et de faire un agrégat de chaîne sur col3, col4.
je veux un résultat comme abc abc abc abc; bcd
quelle expression régulière peut supprimer les mots en double.
Il peut y avoir un cas où les valeurs col3 sont comme
Exemple
col1 col2 col3 col4
abc abc abcaabc abc
abc abc abcaabc DCB
dans ce cas je ne veux pas enlever abc qui est deux fois dans la même phrase.
La sortie ci-dessus doit être abc abc abc abcaabc; DCB

+0

Vos exigences ne sont pas claires pour moi. Vous avez écrit que vous voulez regrouper par col1, col2 mais votre exemple de sortie montre que col3 est également une colonne de regroupement. D'après votre description, il semble que vous souhaitiez grouper par col1, col2, col3 et col4-agrégat col4. –

+0

Non, j'ai clairement mentionné que j'ai besoin d'agrégat de chaînes sur col3 aussi mais si les valeurs sont en double alors j'ai besoin d'une seule valeur unique. – vatsal

Répondre

0

Je pense que cela peut se faire en trois étapes: D'abord, vous fusionner col3 et col4 dans une seule colonne. Ensuite, vous dédupliquez les valeurs. Enfin, vous regroupez sur col1, col2 et effectuez la concaténation.

select col1, col2, 
     STRING_AGG(col3,';') as RESULT 
from (
    select col1, col2, col3 
    from t1 
    union --union operator will make a distinct, try with union all instead 
    select col1, col2, col4 
    from t1 
    )nested 
group by col1, col2 

Est-ce que cela résout votre question?