Um SELECT e dois resultados distintos na mesma tabela

Bem, a pergunta ficou estranha, então vamos explicar…
Desejo fazer uma consulta a uma unica tabela no mysql que retorne dois resultados distintos (condições distintas) de um mesmo campo para preencher duas colunas de uma jtable java. Exemplo: Tenho uma tabela Funcionarios com os campos Nome e Sexo, assim faria a consulta que preencheriam as colunas Homens e Mulheres.

HOMENS | MULHERES
joao | maria
adao | ana
marco | rosa

Ou seja, quando Nome for Sexo M vai pra coluna Homens e da mesma forma pra coluna Mulheres quando for F.

Tipo: SELECT Nome AS Homens FROM tabela_nomes WHERE Sexo = M “AND” SELECT Nome AS Mulheres FROM tabela_nomes WHERE Sexo = F

Desculpe-me, mas travei e não consigo visualizar a sintaxe correta. Ficarei muito grato aos que colaborarem.

Cara, no modelo relacional eu conheço somente uma forma (que nem sei se é padrão ANSI e todos os bancos possuem), que é através de uma tabela temporária.

Aí você transferiria toda a sua lógica de montagem da tabela pra dentro de uma procedure e montaria as colunas da sua tabela TEMP dividindo as linhas onde cada linha teria 1 homem e 1 mulher.

Se não for assim, sua tabela terá que possuir auto-relacionamento pra fazer JOIN e alcançar o resultado que você quer.

Outro jeito é fazer isso programaticamente no software que vai fazer a consulta. Espero ter ajudado.

1 curtida

Obg Adriano! Certamente é uma saída, se não conseguir com uma sintaxe usarei esse recurso. Blz!!!

Juan,
Existe uma função chamada coalesce que eh SQL Ansi-92 e te ajudará nesse caso, segue o exemplo que eu rodei no SQLFIDDLE e testei pra Oracle, MySql e SQLServer e em todos funcionou normalmente.

http://www.sqlfiddle.com/

Script de criação e carga da tabela

create table tabela_nomes(id decimal(1), nome  varchar(50) ,  sexo varchar(1));
insert tabela_nomes values( 1, 'Adolfo Pinheiro', 'M');
insert tabela_nomes values( 2, 'Rodrigo Correa', 'M');
insert tabela_nomes values( 3, 'Geraldo Souza', 'M');
insert tabela_nomes values( 4, 'Davi Piala', 'M');
insert tabela_nomes values( 5, 'Cristiane Santos', 'F');
insert tabela_nomes values( 6, 'Carina Oliveira', 'F');
insert tabela_nomes values( 7, 'Regina Caze', 'F');
insert tabela_nomes values( 8, 'Rosana Lemes', 'F');

Script SQL - Consulta

select 
base.id,
base.nome,
coalesce((select 'MULHER' 
                from tabela_nomes mulher
                where  mulher.id = base.id
                and mulher.sexo = 'F'
               ),'HOMEM') as tipo 

from 
tabela_nomes base

Além dessa sugestão e da tabela temporária você pode resolver isso por um UNION, isNull(sqlServer/Sybase) e através de CASE.

Att,
Davi

Meio estranho este resultado esperado. E se a quantidade de homens for diferente da quantidade de mulheres?

HOMENS | MULHERES
joao | maria
adao | ana
marco | rosa
outro|???

Ainda não me parece ser isso que ele quer. Claro que se for pra criar um tipo, mata na mesma hora a questão, até porque acho que isso ele já tem.

A questão é um resultado com 2 colunas e em cada coluna um nome de homem e um nome de mulher.

Eu ainda não entendi bem pra que isso em um SQL, mas enfim, isso não resolve o problema da pergunta.

Abraços :wink:

Resolvi com JOIN e ON
Obg a todos!