Remplacer la valeur d'un champ par rien si elle est identique à celle de la ligne précédente

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