Обсуждение: Constructing column from different individual fields in same row.

Поиск
Список
Период
Сортировка

Constructing column from different individual fields in same row.

От
froggle2003@yahoo.com (Alex Martinoff)
Дата:
I'm wondering if it's possible to have a query construct a column
where the value of the column at each row is taken from another field
in that same row. For example, suppose you have a table like:

create table users (
    uid serial,
    nickname varchar(20),
    realname varchar(30),
    prefname int2,
    primary key (uid)
);

insert into users (nickname, realname, prefname)
values ('Stevo', 'Steve Sullivan', 1);

insert into users (nickname, realname, prefname)
values ('Johnny Boy', 'John Fisk', 2);


A prefname of 1 means the user prefers their nickname, while 2 means
they prefer their realname.

Is there a query I can perform that would return:

 uid | Preferred Name
-----+----------------
   1 | Stevo
   2 | John Fisk

Or, is it necessary to waste storage by making prefname varchar(30)
and then duplicating the preferred name into the prefname field?

Thanks for any answers.

Re: Constructing column from different individual fields in same row.

От
Bruno Wolff III
Дата:
On Tue, Sep 09, 2003 at 21:02:21 -0700,
  Alex Martinoff <froggle2003@yahoo.com> wrote:
> I'm wondering if it's possible to have a query construct a column
> where the value of the column at each row is taken from another field
> in that same row. For example, suppose you have a table like:

You can use CASE to do this.

Re: Constructing column from different individual fields in

От
Bruce Momjian
Дата:
Bruno Wolff III wrote:
> On Tue, Sep 09, 2003 at 21:02:21 -0700,
>   Alex Martinoff <froggle2003@yahoo.com> wrote:
> > I'm wondering if it's possible to have a query construct a column
> > where the value of the column at each row is taken from another field
> > in that same row. For example, suppose you have a table like:
>
> You can use CASE to do this.

You can also use UNION:

    SELECT col1 ...
    UNION
    SELECT col2 ...

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: Constructing column from different individual fields

От
Mike Mascari
Дата:
Alex Martinoff wrote:

> I'm wondering if it's possible to have a query construct a column
> where the value of the column at each row is taken from another field
> in that same row. For example, suppose you have a table like:
>
> create table users (
>     uid serial,
>     nickname varchar(20),
>     realname varchar(30),
>     prefname int2,
>     primary key (uid)
> );
>
> insert into users (nickname, realname, prefname)
> values ('Stevo', 'Steve Sullivan', 1);
>
> insert into users (nickname, realname, prefname)
> values ('Johnny Boy', 'John Fisk', 2);
>
>
> A prefname of 1 means the user prefers their nickname, while 2 means
> they prefer their realname.
>
> Is there a query I can perform that would return:
>
>  uid | Preferred Name
> -----+----------------
>    1 | Stevo
>    2 | John Fisk


SELECT uid, (CASE WHEN prefname = 1 THEN nickname ELSE realname END)
AS "Preferred Name"
FROM users
WHERE ...

HTH,

Mike Mascari
mascarm@mascari.com