select case sexo when 'M' then nombres||' '||apellidos else '' AS "varones", case sexo when 'F' then nombres||' '||apellidos else '' AS "mujeres" from clientes
Si haces full scan o sea que traes a todos entiendo que no vas a tener problemas de performance. ? hembras? jajaja ------------------------------------------------------------- Hola a Todos!! Tengo una tabla llamada cliente create table cliente( codigo serial primary key, nombres varchar(100), apellidos varchar(100), sexo char(1) ) y necesito presentar los datos de la siguiente manera: Varones Hembras Jose Lopez Maria Jimenez Luis Agosto Carolina Disla Domingo Almanzar Juan Duran -- Carlos Enrique Perez Direccion Syswarp SRL www.syswarp.com.ar "Los sistemas basados en Linux se encuentran en 446 de los 500 supercomputadores más potentes del mundo." El mar, 24-07-2012 a las 16:11 +0000, José Fermín Francisco Ferreras escribió: > > > > ing. José Fermín Francisco Ferreras > San Francisco de Macorís, Rep. Dom. > > > > > > > > > ______________________________________________________________________ > Date: Tue, 24 Jul 2012 10:24:34 -0400 > From: asotolo...@uci.cu > To: josefermi...@hotmail.com > CC: pgsql-es-ayuda@postgresql.org > Subject: Re: [pgsql-es-ayuda] Tabla cliente y dividirla por sexo > > El 22/07/2012 20:42, José Fermín Francisco Ferreras escribió: > > Gracias a Anthony y a Armando por sus respuestas!! > > > > Estuve probando la opcion de usar WITH y los resultados no me > lo da como requiero. > El resultado es de esta manera: > > > > with Va as (SELECT nombres||' '||apellidos AS "varones" > FROM cliente > WHERE sexo='M'), > He as (SELECT nombres||' '||apellidos AS "hembras" > FROM cliente > WHERE sexo='F' ) > > select Va.varones, He.hembras from Va,He > > > Varones Hembras > MICHAEL JORDAN MARIA SHARAPOVA > MICHAEL JORDAN ANNA KOURNIKOVA > ALBERT PUJOLS MARIA SHARAPOVA" > ALBERT PUJOLS ANNA KOURNIKOVA" > MIKE TYSON MARIA SHARAPOVA" > MIKE TYSON ANNA KOURNIKOVA" > > > > > En verdad nunca había utilizado la instrucción with. > > > La parte final la modifiqué de la siguiente manera: > > > select va.varones, he.hembras from Va full outer join He on > (va.codigo=he.codigo); > > > Pero el resultado tampoco es el esperado: > > > Varones Hembras > MICHAEL JORDAN > ALBERT PUJOLS > MIKE TYSON > > > ANNA KOURNIKOVA > MARIA SHARAPOVA > > > Se necesita que salga de esta manera: > > > Varones Hembras > MICHAEL JORDAN ANNA KOURNIKOVA > ALBERT PUJOLS MARIA SHARAPOVA > MIKE TYSON > > > > > Nota: > Utilizo postgresql 9.1 en ubuntu 12.04 > > > > > ing. José Fermín Francisco Ferreras > San Francisco de Macorís, Rep. Dom. > > > > > > > ______________________________________________________________ > Date: Sun, 22 Jul 2012 12:48:43 -0400 > From: asotolo...@uci.cu > To: josefermi...@hotmail.com > CC: pgsql-es-ayuda@postgresql.org > Subject: Re: [pgsql-es-ayuda] Tabla cliente y dividirla por > sexo > > El 21/07/2012 12:52, José Fermín Francisco Ferreras escribió: > > Hola a Todos!! > > Tengo una tabla llamada cliente > > create table cliente( > codigo serial primary key, > nombres varchar(100), > apellidos varchar(100), > sexo char(1) > ) > > y necesito presentar los datos de la siguiente manera: > > Varones Hembras > > Jose Lopez Maria Jimenez > Luis Agosto Carolina Disla > Domingo Almanzar > Juan Duran > > osea los datos estan todos en una misma tabla y de > manera desordenada y se necesita presentarlo de la > manera anterior. > > Mi pregunta es: > > Se puede trabajar este caso con cursores y tablas > temporales o bien podría hacerse con una consulta SQL, > y cual es la manera más eficiente de hacerlo de los > dos casos?? > > > > > ing. José Fermín Francisco Ferreras > San Francisco de Macorís, Rep. Dom. > > > > > > Buenos días según entiendo necesitas los datos resultados en > una misma consulta ,si estas en una versión superior a 8,4 de > postgresql puedes utilizar las CTE con la clausula with > > ejemplo > with Va as (SELECT nombres||' '||apellidos AS "varones" > FROM cliente > WHERE sexo='M'), > He as (SELECT nombres||' '||apellidos AS "hembras" > FROM cliente > WHERE sexo='F' ) > > select Va.varones, He.hembras from Va,He > > > saludos > > > > > > > > Hola José , ya tengo algo que te puede ayudar mira vas a tener que > usar funciones ventanas como row_number() [numera las filas por un > orden determinado] > y en con la clausula with realiza un full join por el id creado por el > row_number() :D > > > Aqui la posible solución : > > with Va as (SELECT nombre AS "varones", row_number() over (order by > nombre) as id > FROM cliente1 > WHERE sexo='M'), > He as (SELECT nombre AS "hembras",row_number() over (order by > nombre)as id > FROM cliente1 > WHERE sexo='F' ) > > select Va.varones, He.hembras from Va left join He using (id) > si resultado > > "Anthony";"Claudia" > "Armando";"Fina" > "Juan";"" > "Yoan";"" > "Felipe";"" > "Cuco";"" > > > saludos > > > Gracias por tu magistral aporte Anthony!! > > > > > >