Skip site navigation (1) Skip section navigation (2)

RE: Tabla cliente y dividirla por sexo

From: =?iso-8859-1?B?Sm9z6SBGZXJt7W4gRnJhbmNpc2NvIEZlcnJlcmFz?=<josefermin54(at)hotmail(dot)com>
To: <asotolongo(at)uci(dot)cu>
Cc: Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Tabla cliente y dividirla por sexo
Date: 2012-07-24 16:11:26
Message-ID: BAY169-W415A2C2D96C75AD66D30D0C6DC0@phx.gbl (view raw or flat)
Thread:
Lists: pgsql-es-ayuda


ing. José Fermín Francisco Ferreras 
San Francisco de Macorís, Rep. Dom. 


Date: Tue, 24 Jul 2012 10:24:34 -0400
From: asotolongo(at)uci(dot)cu
To: josefermin54(at)hotmail(dot)com
CC: pgsql-es-ayuda(at)postgresql(dot)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: asotolongo(at)uci(dot)cu

To: josefermin54(at)hotmail(dot)com

CC: pgsql-es-ayuda(at)postgresql(dot)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!!



    













 		 	   		  

In response to

Responses

pgsql-es-ayuda by date

Next:From: SYSWARP - Carlos Enrique PerezDate: 2012-07-24 18:33:40
Subject: RE: Tabla cliente y dividirla por sexo
Previous:From: =?iso-8859-1?B?QXJtYW5kbyBWZW5lZ2FzIFDpcmV6?=Date: 2012-07-24 15:00:13
Subject: RE: Tabla cliente y dividirla por sexo

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group