Usuário com melhor resposta
Agrupar por Idades diferentes usando IIF...

Pergunta
-
Olá a todos... Estou com o seguinte problema:
Tenho uma consulta SQL que me retorna algumas linhas como mostra a imagem:O problema é que eu tenho que exibir agrupado em uma faixa de idade tal qual esse exemplo:
Sei que no SQL Server tem o "CASE", e no Access? Estava lendo sobre o "IIF" mas não consegui usar no meu caso...
Seria algo como:
SE a IDADE estiver entre 0 e 1 ano, mostre os campos QTDE_GUIA, COBRADO E LIBERADO
SE a IDADE estiver entre 2 e 5 anos, mostre os campos QTDE_GUIA, COBRADO E LIBERADO
SE a IDADE estiver entre 6 e 10 anos, mostre os campos QTDE_GUIA, COBRADO E LIBERADO
e assim, sucessivamente...
Alguém pode me ajudar?
O meu muito obrigado por enquanto!
Respostas
-
Uso IIF em VB.Net não sei se é o ideal, mas no seu caso você poderia colocar um iif dentro de outro:
A estrutura do IIF é a seguinte:
iif(condição,resposta se verdadeiro,resposta se falso)
Colocando um outro iif na parte reservada a resposta se falso o resultado é um SENÃO SE, veja:
iif(idade <= 1, MostraCampos1, iif(idade <=5, MostraCampos2,iif(idade <= 10,MostraCampos3,Mostracampos4)))
Eu fiz apenas uma parte, mas neste caso poderiamos traduzir da seguinte forma:
SE IDADE FOR MENOR OU IGUAL A 1 ENTÃO MOSTRA CAMPOS 1 SENÃO SE IDADE FOR MENOR OU IGUAL A 5 ENTÃO MOSTRA CAMPOS 2 SENÃO SE IDADE FOR MENOR OU IGUAL A 10 MOSTRA CAMPOS 3 SENÃO MOSTRACAMPOS4.
Se o post foi útil marque como resposta. - Advanced Web Application - MCP- Marcado como Resposta Gilberto Lúcio sábado, 29 de maio de 2010 03:21
-
Gilberto,
Você pode fazer isso com um sub-select facilmente... Veja só (para esse caso, só fiz com três faixas, mas, é só adaptar para as faixas que você tem seguindo a mesma lógica)...
SELECT
FAIXA_IDADE,
COUNT(QUANT_GUIAS) AS COUNT_QUANT_GUIAS,
SUM(COBRADO) AS SUM_COBRADO,
SUM(LIBERADO) AS SUM_LIBERADO
FROM (
SELECT
IIF(IDADE BETWEEN 0 AND 1, 'Até 1 ano', IIF(IDADE BETWEEN 2 AND 5, '2 a 5', 'Maior que 5')) AS FAIXA_IDADE,
QUANT_GUIAS,
COBRADO,
LIBERADO
FROM TABLE1)
GROUP BY FAIXA_IDADE
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima- Marcado como Resposta Gilberto Lúcio sábado, 29 de maio de 2010 03:20
Todas as Respostas
-
Uso IIF em VB.Net não sei se é o ideal, mas no seu caso você poderia colocar um iif dentro de outro:
A estrutura do IIF é a seguinte:
iif(condição,resposta se verdadeiro,resposta se falso)
Colocando um outro iif na parte reservada a resposta se falso o resultado é um SENÃO SE, veja:
iif(idade <= 1, MostraCampos1, iif(idade <=5, MostraCampos2,iif(idade <= 10,MostraCampos3,Mostracampos4)))
Eu fiz apenas uma parte, mas neste caso poderiamos traduzir da seguinte forma:
SE IDADE FOR MENOR OU IGUAL A 1 ENTÃO MOSTRA CAMPOS 1 SENÃO SE IDADE FOR MENOR OU IGUAL A 5 ENTÃO MOSTRA CAMPOS 2 SENÃO SE IDADE FOR MENOR OU IGUAL A 10 MOSTRA CAMPOS 3 SENÃO MOSTRACAMPOS4.
Se o post foi útil marque como resposta. - Advanced Web Application - MCP- Marcado como Resposta Gilberto Lúcio sábado, 29 de maio de 2010 03:21
-
Gilberto,
Veja se o conteúdo destes links te ajuda em algo:
http://www.scriptbrasil.com.br/forum/lofiversion/index.php/t80514.html
http://social.msdn.microsoft.com/Forums/pt-BR/accesspt/thread/0b57efa0-63df-44d5-acbc-cd5be2aa1ea4
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Opa pessoal, obrigado por responder!
Seguinte, é quase isso que vcs me passaram... Mas dessa forma, eu só consigo os resultados na horizontal... Na verdade eu preciso da instrução SQL que me traga às somas dos campos em cada linha... Se eu tiver 3 períodos de Idades na minha Query, eu quero que ela me retorne 3 linhas de uma só vez, mas somando os campos respectivos de cada período... Ficaria algo como:
1º Linha = (IDADE BETWEEN 0 AND 1) COUNT(QUANT_GUIAS) || SUM(COBRADO) || SUM(LIBERADO)
2º Linha = (IDADE BETWEEN 2 AND 5) COUNT(QUANT_GUIAS) || SUM(COBRADO) || SUM(LIBERADO)
3º Linha = (IDADE BETWEEN 6 AND 10) COUNT(QUANT_GUIAS) || SUM(COBRADO) || SUM(LIBERADO)
4º Linha = (IDADE BETWEEN 11 AND 20) COUNT(QUANT_GUIAS) || SUM(COBRADO) || SUM(LIBERADO)
Não precisa mostrar os campos de idade porque se não, não vai agrupar...
O resultado que eu quero é exatamente como está na segunda imagem do primeiro post, mas sem os "textos" contendo o intervalo de idade... Eu preciso só dos campos QUANT_GUIAS| COBRADO | GLOSADO
Obrigado pela ajuda! -
Olá, Gilberto
Você pode utlizar ADO.NET?
Se sim poderia criar programaticamente uma DataTable com DataColumns e fazer um foreach na sua consulta e popular da forma que você gostaria.
Américo Arvani
MCP Frw web 2.0
Se ajudou , marque como resposta.
http://americoarvani.blogspot.com -
-
Gilberto,
Você pode fazer isso com um sub-select facilmente... Veja só (para esse caso, só fiz com três faixas, mas, é só adaptar para as faixas que você tem seguindo a mesma lógica)...
SELECT
FAIXA_IDADE,
COUNT(QUANT_GUIAS) AS COUNT_QUANT_GUIAS,
SUM(COBRADO) AS SUM_COBRADO,
SUM(LIBERADO) AS SUM_LIBERADO
FROM (
SELECT
IIF(IDADE BETWEEN 0 AND 1, 'Até 1 ano', IIF(IDADE BETWEEN 2 AND 5, '2 a 5', 'Maior que 5')) AS FAIXA_IDADE,
QUANT_GUIAS,
COBRADO,
LIBERADO
FROM TABLE1)
GROUP BY FAIXA_IDADE
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima- Marcado como Resposta Gilberto Lúcio sábado, 29 de maio de 2010 03:20
-
André, é, sem tirar em nem por, exatamente isso que eu queria...
Agora ficou perfeito...
SELECT IDADE_PACIENTE, COUNT(GUIA) AS QTDE_GUIA, SUM(VALOR_TOTAL) AS TOTAL FROM (SELECT IIF(IDADE_PACIENTE BETWEEN 0 AND 1, 'Até 1 Ano', IIF(IDADE_PACIENTE BETWEEN 2 AND 5, '2 a 5 Anos', IIF(IDADE_PACIENTE BETWEEN 6 AND 10, '6 a 10 Anos', IIF(IDADE_PACIENTE BETWEEN 11 AND 20, '11 a 20 Anos', IIF(IDADE_PACIENTE BETWEEN 21 AND 50, '21 a 50 Anos', IIF(IDADE_PACIENTE BETWEEN 51 AND 60, '51 a 60 Anos', IIF(IDADE_PACIENTE BETWEEN 61 AND 65, '61 a 65 Anos', 'Acima de 66 Anos'))))))) AS IDADE_PACIENTE, GUIA, VALOR_TOTAL FROM PREANALISE) GROUP BY IDADE_PACIENTE
@Marcus, agora, olhando o exemplo do André foi que eu entendi o que você queria dizer
Muito obrigado aos dois pela ajuda!
Abs e bom fds!