Обсуждение: 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.
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.
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
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