Galera, boa noite
estou com uma duvida no SQL e queria saber se seria possivel resolver
tenho a seguinte tabela:
faixa_etaria | Plano | Valor
00 - 18 | Pl01 | 100,00
00 - 18 | Pl02 | 200,00
00 - 18 | Pl03 | 300,00
19 - 23 | Pl01 | 200,00
19 - 23 | Pl02 | 300,00
19 - 23 | Pl03 | 400,00
queria que, se possivel, atravez do SQL ela ficasse assim:
faixa_etaria | Pl01 | Pl02 | Pl03
00 - 18 | 100,00 | 200,00 | 300,00
19 - 23 | 200,00 | 300,00 | 400,00
Desde ja Agradeço a atenção de todos voces
Bernard
qual o banco de dados?
alguns suportam comandos específicos pra este tipo de operação.
Não entendi a duvida!
parece que as duas tabelas são iguais!
explique com mais detalhes a consulta SQL!
Vamos partir do pressuposto de que você está usando SQL ANSI e que usa o MySQL.
Vou ser cinsero, não tenho idéia de como fazer isso.
Você tem que montar uma query dinâmica. Mas para fazer isso você tem que saber os dados do banco.
Em Oracle tem um lance que se chama pivo.
Vou te mostrar um exemplo.
sql> select cargo, deptno, count(*) total
from colaborador
group by cargo, deptno
/
CARGO DEPTNO TOTAL
---------- ---------- ----------
ANALISTA 20 5
GERENTE 10 1
GERENTE 20 1
GERENTE 30 1
PRESIDENTE 10 1
TÉCNICO 10 3
TÉCNICO 20 2
TÉCNICO 30 8
sql> select cargo
, decode(deptno, 10, total, null) dept_10
, decode(deptno, 20, total, null) dept_20
, decode(deptno, 30, total, null) dept_30
from ( select cargo, deptno, count(*) total
from colaborador
group by cargo, deptno )
/
CARGO DEPT_1O DEPT_2O DEPT_3O
---------- ---------- ---------- ----------
ANALISTA 5
GERENTE 1
GERENTE 1
GERENTE 1
PRESIDENTE 1
TÉCNICO 3
TÉCNICO 2
TÉCNICO 8
Pelo que entendi é isso que você gostaria de fazer.
Perguntei a um amigo que meche com BD e ele me disse o seguinte.
Você faz uma consulta para ver todos os planos que existem em cima do resultado .Monta um sql dinamico
vai concatenando uma string instricoes sql
ai para cada plano você faz um case
que tds os bancos intendem
(Daniel)
Vai ser tenso em SQL essa bagaça hein.
Mas é possível.
Em Oracle é bem mais fácil, como pode observar.
Espero ter ajudado.
Abraço e boa sorte com o projeto.
Quando mais simples a forma que resolvemos um problema, menos tempo perdemos com a complexidade de alguns sistemas.
Sem recentimentos…
Covardia passar exemplos de oracle para quem tem duvidas nesse forum!. Com SBD Oracle você até faz programas orientado a objetos, mas o que vale aqui é a forma básica de resolver um problema e tentar iniciar em um nivel mais alto. Quando entendemos o basico, podemos subir um degrau para um nivel de conhecimento melhor o intermediario e depois passar para o avançado . Essa é a ideia de quem procura ajuda no forum. Não acredito que passando a resolução do problema estaremos ajudando os que precisam de ajuda.
falei sobre subconsulta, pois me parece uma coisa básica e facil de se usar em qualquer SGBD, principalmente usando SQL ANSI e exemplos por exemplo a internet está cheia
já que pediu estou enviando um exemplo abaixo:
SELECT *
FROM
Produtos
WHERE
PrecoUnidade
ANY
(
SELECT
PrecoUnidade
FROM
DetalhePedido
WHERE
Desconto = 0 .25
)
claro que não é o que ele deseja, mas já da uma ideia.
acredito que a internet ajuda muito quando pesquisamos afundo o que precisamos.
Espero ter ajudado
O que é isso. Sem recentimentos.
Então, é que não foi postado o banco que está sendo utilizado.
Seria arrogância minha interpretar que estivesse usando SQL ANSI sabendo que existem SGBD que implementam estruturas próprias para facilitar o dia a dia do DBA.
O Oracle 10g é gratuito. Nada que impede que nosso amigo não o esteja utilizando.
Eu coloquei duas formas, e não resolvi seu problema, pelo contrário mostrei duas formas de se fazer.
E não acho covardia passar exemplos de Oracle.
Não quero levantar questionamentos neste tópico, mas a Oracle e o Java agora caminham mais próximos do que se imagina.
Portanto se nosso amigo estiver estudando Oracle está no caminho mais do que certo.
Ao menu ponto de vista, claro.
Mas de qualquer forma.
Está mais do que completa a resposta.
Uma sugestão em Oracle e duas em SQL ANSI.
Abraço.
[quote=edu_fernandes]O que é isso. Sem recentimentos.
Então, é que não foi postado o banco que está sendo utilizado.
Seria arrogância minha interpretar que estivesse usando SQL ANSI sabendo que existem SGBD que implementam estruturas próprias para facilitar o dia a dia do DBA.
O Oracle 10g é gratuito. Nada que impede que nosso amigo não o esteja utilizando.
Eu coloquei duas formas, e não resolvi seu problema, pelo contrário mostrei duas formas de se fazer.
E não acho covardia passar exemplos de Oracle.
Não quero levantar questionamentos neste tópico, mas a Oracle e o Java agora caminham mais próximos do que se imagina.
Portanto se nosso amigo estiver estudando Oracle está no caminho mais do que certo.
Ao menu ponto de vista, claro.
Mas de qualquer forma.
Está mais do que completa a resposta.
Uma sugestão em Oracle e duas em SQL ANSI.
Abraço.[/quote]
tudo bem amigo ! todos sabemos que oracle comprou a Sun e mais que ela já colocou o java junto com um aplicativo de desenvolvimento dela o frameword ADF, mas a questão aqui é outra. Desde o inicio do topico você iniciou uma campanha contra os participantes , respondi para o autor do topico para usar subconsulta e vc esnobou dizendo que falar para usar subconsultas é facil dificil é dar exemplos. Amigo eu respeito a opinião dos outros participantes , vejo as mensagens , mas nao procuro criticar e sim ajudar com uma informação , talvez minha informação nao ajude , mas se ajudar ficarei tranquilo. Agora eu já enviei varios exemplos nesse forum e já ate fiz um questao de alguns exemplos solicitados no forum , mas to sempre incentivando os participantes a procurarem a solução. Peço que desculpe-me por qualquer coisa, mas peço tambem que respeito a opiniao dos participantes
obrigado
Gente…
Obrigado a todos por me responderem
primeiramente o Banco que estou usando é o PostgreSQL
só que como eu n sou muito bom com banco de dados…fiquei meio perdido com tudo que vcs me falaram…
se puderem me esclarecer mais, agradeço.
vou tentar falar de novo.
minha tabela é a seguinte:
faixa_etaria | Plano | Valor do plano
00 - 18 | Pl01 | 100,00
00 - 18 | Pl02 | 200,00
00 - 18 | Pl03 | 300,00
19 - 23 | Pl01 | 200,00
19 - 23 | Pl02 | 300,00
19 - 23 | Pl03 | 400,00
e atravez de algum recurso do PostGreSQL ou pelo próprio SQL, queria que ela ficasse assim:
faixa_etaria | Valor Pl01 | Valor Pl02 | Valor Pl03
00 - 18 | 100,00 | 200,00 | 300,00
19 - 23 | 200,00 | 300,00 | 400,00
lembrando que essas dados são dinamicos e eu posso simplesmente cadastrar um novo plano (Pl04) ou uma nova faixa etária (24 - 28), assim minha tabela ficaria com mais colunas
agradeço a colaboração de todos
Problema resolvido.
Mas respeito a opinião de todos aqui. Desde o que se cadastrou hoje e não sabe nada do Java, até o moderador. Sem distinção.
Não quis lhe ofender.
De qualquer forma me perdoe a ofença.
Não quero discutir.