Re: CASE(?) to write in a different column based on a string pattern

From: Andrew Kerber <andrew(dot)kerber(at)gmail(dot)com>
To: Geoff Winkless <pgsqladmin(at)geoff(dot)dj>
Cc: Moreno Andreo <moreno(dot)andreo(at)evolu-s(dot)it>, PostgreSQL mailing lists <pgsql-general(at)postgresql(dot)org>
Subject: Re: CASE(?) to write in a different column based on a string pattern
Date: 2019-11-13 16:48:36
Message-ID: CAJvnOJbgAHvBy9rbGNZju2p9wY-hu0UvzOMLOA2nyVbDY+btng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

So what you are doing is transforming the table format from vertical to
horizontal. I think you will want to use a union to join the table to
itself along with the case statement to produce the output you are looking
for.

On Wed, Nov 13, 2019 at 10:37 AM Geoff Winkless <pgsqladmin(at)geoff(dot)dj> wrote:

> On Wed, 13 Nov 2019 at 16:24, Moreno Andreo <moreno(dot)andreo(at)evolu-s(dot)it>
> wrote:
> > |foo |bar |baz |
> > 1234
> > 5678
> > 9012
> > (hoping text formatting is ok... 1234 should go in column foo, 568 in
> > bar and 9012 in baz)
> >
> > Is it possible?
>
> Simplest way in plain SQL would be individual case statements for each
> column, I think.
>
> SELECT pattern,
> CASE WHEN pattern LIKE 'foo%' THEN SUBSTR(pattern, 4) ELSE '' END AS foo
> CASE WHEN pattern LIKE 'bar%' THEN SUBSTR(pattern, 4) ELSE '' END AS bar
> CASE WHEN pattern LIKE 'baz%' THEN SUBSTR(pattern, 4) ELSE '' END AS baz
> FROM tbl;
>
> Geoff
>
>
>

--
Andrew W. Kerber

'If at first you dont succeed, dont take up skydiving.'

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Moreno Andreo 2019-11-13 17:00:14 Re: CASE(?) to write in a different column based on a string pattern
Previous Message Geoff Winkless 2019-11-13 16:36:43 Re: CASE(?) to write in a different column based on a string pattern