Thread: how to solve this problem
Dear users, I have this problem I have a table where there are 20 columns named vinc1, vinc2, vinc3, vinc4, etc.... the values contained into each column are simply 1 or 0 (each column is dichotomic) 1 means presence 0 means absence I would obtain a column (new_column) containg the name of the columns, comma separated, where the value is = 1 for example: vinc1 vinc2 vinc3 vinc4 new_column 1 0 1 0 vinc1,vinc3 0 0 0 1 vinc4 0 1 1 1 vinc2,vinc3,vinc4 can someone help me to find the best way to obtain this result??? thank you very much Ivan -- Ivan Marchesini Department of Civil and Environmental Engineering University of Perugia Via G. Duranti 93/a 06125 Perugia (Italy) e-mail: marchesini@unipg.it ivan.marchesini@gmail.com tel: +39(0)755853760 fax: +39(0)755853756 jabber: geoivan73@jabber.org
Just a thought, Could you achieve that same result using the binary representation of an integer? Regards, Richard --- ivan marchesini <marchesini@unipg.it> wrote: > Dear users, > I have this problem > > I have a table where there are 20 columns named > vinc1, vinc2, vinc3, vinc4, etc.... > > the values contained into each column are simply 1 or 0 (each column is > dichotomic) > 1 means presence > 0 means absence > > I would obtain a column (new_column) containg the name of the columns, > comma separated, where the value is = 1 > > for example: > > vinc1 vinc2 vinc3 vinc4 new_column > 1 0 1 0 vinc1,vinc3 > 0 0 0 1 vinc4 > 0 1 1 1 vinc2,vinc3,vinc4 > > can someone help me to find the best way to obtain this result??? > thank you very much > > Ivan > > > > > > > > -- > Ivan Marchesini > Department of Civil and Environmental Engineering > University of Perugia > Via G. Duranti 93/a > 06125 > Perugia (Italy) > e-mail: marchesini@unipg.it > ivan.marchesini@gmail.com > tel: +39(0)755853760 > fax: +39(0)755853756 > jabber: geoivan73@jabber.org > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly >
Sorry, I'm not able to understand how I can use this solution!!! can you better explain me your suggestion??? Thanks very much Il giorno gio, 13/04/2006 alle 06.51 -0700, Richard Broersma Jr ha scritto: > Just a thought, > > Could you achieve that same result using the binary representation of an integer? > > Regards, > > Richard > > --- ivan marchesini <marchesini@unipg.it> wrote: > > > Dear users, > > I have this problem > > > > I have a table where there are 20 columns named > > vinc1, vinc2, vinc3, vinc4, etc.... > > > > the values contained into each column are simply 1 or 0 (each column is > > dichotomic) > > 1 means presence > > 0 means absence > > > > I would obtain a column (new_column) containg the name of the columns, > > comma separated, where the value is = 1 > > > > for example: > > > > vinc1 vinc2 vinc3 vinc4 new_column > > 1 0 1 0 vinc1,vinc3 > > 0 0 0 1 vinc4 > > 0 1 1 1 vinc2,vinc3,vinc4 > > > > can someone help me to find the best way to obtain this result??? > > thank you very much > > > > Ivan > > > > > > > > > > > > > > > > -- > > Ivan Marchesini > > Department of Civil and Environmental Engineering > > University of Perugia > > Via G. Duranti 93/a > > 06125 > > Perugia (Italy) > > e-mail: marchesini@unipg.it > > ivan.marchesini@gmail.com > > tel: +39(0)755853760 > > fax: +39(0)755853756 > > jabber: geoivan73@jabber.org > > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 1: if posting/reading through Usenet, please send an appropriate > > subscribe-nomail command to majordomo@postgresql.org so that your > > message can get through to the mailing list cleanly > > > > -- Ivan Marchesini Department of Civil and Environmental Engineering University of Perugia Via G. Duranti 93/a 06125 Perugia (Italy) e-mail: marchesini@unipg.it ivan.marchesini@gmail.com tel: +39(0)755853760 fax: +39(0)755853756 jabber: geoivan73@jabber.org
> I have a table where there are 20 columns named > vinc1, vinc2, vinc3, vinc4, etc.... > > the values contained into each column are simply 1 or 0 (each column is > dichotomic) > 1 means presence > 0 means absence > > I would obtain a column (new_column) containg the name of the columns, > comma separated, where the value is = 1 > > for example: > > vinc1 vinc2 vinc3 vinc4 new_column > 1 0 1 0 vinc1,vinc3 > 0 0 0 1 vinc4 > 0 1 1 1 vinc2,vinc3,vinc4 > > can someone help me to find the best way to obtain this result??? > thank you very much Here's a brute-force method. Maybe someone else has a more elegant way. More info on the nature of your data and what you are trying to obtain from it would help in finding such elegance. select substr( case when vinc1 = 1 then ',vinc1' else '' || case when vinc2 = 1 then ',vinc2' else '' || ... case whenvinc20 = 1 then ',vinc20' else '' ,2) as new_column ... As to the binary representation mentioned elsewhere, the idea is that you can view vinc1-vinc20 as bits in a binary number equal to vinc1 + 2*vinc2 + 4*vinc3 + 8*vinc4...2^19*vinc20. Whether or not this is useful depends on what you are trying to do. Cheers, Steve
Thank you very much!!! your suggestion seems really usefull!! I will try it very soon!!! ivan Il giorno gio, 13/04/2006 alle 11.34 -0700, Steve Crawford ha scritto: > > I have a table where there are 20 columns named > > vinc1, vinc2, vinc3, vinc4, etc.... > > > > the values contained into each column are simply 1 or 0 (each column is > > dichotomic) > > 1 means presence > > 0 means absence > > > > I would obtain a column (new_column) containg the name of the columns, > > comma separated, where the value is = 1 > > > > for example: > > > > vinc1 vinc2 vinc3 vinc4 new_column > > 1 0 1 0 vinc1,vinc3 > > 0 0 0 1 vinc4 > > 0 1 1 1 vinc2,vinc3,vinc4 > > > > can someone help me to find the best way to obtain this result??? > > thank you very much > > Here's a brute-force method. Maybe someone else has a more elegant way. > More info on the nature of your data and what you are trying to obtain > from it would help in finding such elegance. > > select > substr( > case when vinc1 = 1 then ',vinc1' else '' || > case when vinc2 = 1 then ',vinc2' else '' || > ... > case when vinc20 = 1 then ',vinc20' else '' > ,2) as new_column ... > > As to the binary representation mentioned elsewhere, the idea is that > you can view vinc1-vinc20 as bits in a binary number equal to vinc1 + > 2*vinc2 + 4*vinc3 + 8*vinc4...2^19*vinc20. Whether or not this is useful > depends on what you are trying to do. > > Cheers, > Steve > -- Ivan Marchesini Department of Civil and Environmental Engineering University of Perugia Via G. Duranti 93/a 06125 Perugia (Italy) e-mail: marchesini@unipg.it ivan.marchesini@gmail.com tel: +39(0)755853760 fax: +39(0)755853756 jabber: geoivan73@jabber.org
the same can be even achieved, instead of having 20 different columns,
in a single column varchar(20) vincs('11010111011101110010').
Luckys.
On 4/14/06, ivan marchesini <marchesini@unipg.it> wrote:
Thank you very much!!!
your suggestion seems really usefull!! I will try it very soon!!!
ivan
Il giorno gio, 13/04/2006 alle 11.34 -0700, Steve Crawford ha scritto:
> > I have a table where there are 20 columns named
> > vinc1, vinc2, vinc3, vinc4, etc....
> >
> > the values contained into each column are simply 1 or 0 (each column is
> > dichotomic)
> > 1 means presence
> > 0 means absence
> >
> > I would obtain a column (new_column) containg the name of the columns,
> > comma separated, where the value is = 1
> >
> > for example:
> >
> > vinc1 vinc2 vinc3 vinc4 new_column
> > 1 0 1 0 vinc1,vinc3
> > 0 0 0 1 vinc4
> > 0 1 1 1 vinc2,vinc3,vinc4
> >
> > can someone help me to find the best way to obtain this result???
> > thank you very much
>
> Here's a brute-force method. Maybe someone else has a more elegant way.
> More info on the nature of your data and what you are trying to obtain
> from it would help in finding such elegance.
>
> select
> substr(
> case when vinc1 = 1 then ',vinc1' else '' ||
> case when vinc2 = 1 then ',vinc2' else '' ||
> ...
> case when vinc20 = 1 then ',vinc20' else ''
> ,2) as new_column ...
>
> As to the binary representation mentioned elsewhere, the idea is that
> you can view vinc1-vinc20 as bits in a binary number equal to vinc1 +
> 2*vinc2 + 4*vinc3 + 8*vinc4...2^19*vinc20. Whether or not this is useful
> depends on what you are trying to do.
>
> Cheers,
> Steve
>
--
Ivan Marchesini
Department of Civil and Environmental Engineering
University of Perugia
Via G. Duranti 93/a
06125
Perugia (Italy)
e-mail: marchesini@unipg.it
ivan.marchesini@gmail.com
tel: +39(0)755853760
fax: +39(0)755853756
jabber: geoivan73@jabber.org
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings