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 
Resolvi com JOIN e ON
Obg a todos!