Lists: | pgsql-fr-generale |
---|
From: | Denis Bitouzé <dbitouze(at)wanadoo(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Remplacer la valeur d'un champ par rien si elle est identique à celle de la ligne précédente |
Date: | 2010-01-21 15:45:26 |
Message-ID: | 20100121164526.66a8203e@drums |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
imaginons qu'une requête porte sur plusieurs champs avec tri sur l'un
d'entre eux. Y a-t-il moyen (j'en doute, mais sait-on jamais) de
remplacer, sur chacune des lignes, la valeur de ce champ par rien si
elle est identique à celle de la ligne précédente.
Par exemple, au lieu d'obtenir ceci :
champ | autre champ |
-------+-------------+
1 | bla bla |
1 | bla bla |
2 | bla bla |
2 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
3 | bla bla |
4 | bla bla |
4 | bla bla |
4 | bla bla |
4 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
5 | bla bla |
obtenir cela :
champ | autre champ |
-------+-------------+
1 | bla bla |
| bla bla |
2 | bla bla |
| bla bla |
3 | bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
4 | bla bla |
| bla bla |
| bla bla |
| bla bla |
5 | bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
| bla bla |
Merci d'avance.
--
Denis
From: | "Daniel Verite" <daniel(at)manitou-mail(dot)org> |
---|---|
To: | "Denis =?ISO-8859-15?Q?Bitouz=E9?=" <dbitouze(at)wanadoo(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Remplacer la valeur d'un champ par rien si elle est identique à celle de la ligne précédente |
Date: | 2010-01-21 17:22:58 |
Message-ID: | c89f6158-36dd-4969-a825-92686e7772c1@mm |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Denis Bitouzé wrote:
> imaginons qu'une requête porte sur plusieurs champs avec tri sur l'un
> d'entre eux. Y a-t-il moyen (j'en doute, mais sait-on jamais) de
> remplacer, sur chacune des lignes, la valeur de ce champ par rien si
> elle est identique à celle de la ligne précédente.
C'est possible avec une fonctionnalité de fenêtrage (donc la version 8.4).
Si la colonne s'appelle champ, il faudrait la remplacer dans le select final
par l'expression:
CASE WHEN row_number() over (partition by champ order by champ)=1
THEN champ
ELSE null
END
Cordialement,
--
Daniel
PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org
From: | Denis Bitouzé <dbitouze(at)wanadoo(dot)fr> |
---|---|
To: | "Daniel Verite" <daniel(at)manitou-mail(dot)org> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Remplacer la valeur d'un champ par rien si elle est identique à celle de la ligne précédente |
Date: | 2010-01-21 17:41:05 |
Message-ID: | 20100121184105.77629e7e@drums |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Le jeudi 21/01/10 à 18h22,
"Daniel Verite" <daniel(at)manitou-mail(dot)org> a écrit :
> C'est possible avec une fonctionnalité de fenêtrage (donc la version
> 8.4). Si la colonne s'appelle champ, il faudrait la remplacer dans le
> select final par l'expression:
>
> CASE WHEN row_number() over (partition by champ order by champ)=1
> THEN champ
> ELSE null
> END
OK, je vais étudier cela. Merci !
--
Denis