SELECT com condição que retorne mais de um resultado

05/03/2013

8

Olá Boa noite a todos. este e o meu primeiro tópico no DevMedia e peço desculpas caso haja algo errado

Estou com problema em realizar uma consulta que usa uma variável enviada pelo BI para retornar mais de um resultado. Quando o filtro1 é igual a gerente a consulta me trás todos os usuários. Quando o filtro1 é igual a supervisor ela deve me trazer apenas os usuários que possuam o 'codsupervisor' igual ao valor do filtro2.

segue um exemplo da query
select case 
when '#tfiltro#' ='GERENTE'
then (select  nome,codusurario,faturamento,codsupervisor from usuario)
when '#tfiltro#' = 'Supervisor' then
(select  nome,codusurario,faturamento from usuario
where  codsupervisor = '#tfiltro2#')end

essa consulta da erro de "too many values" porque a clausula
CASE
aceita apenas um único valor.
Alguém ai pode me ajudar?
Responder

Post mais votado

06/03/2013

O "CASE" que você está utilizando está criando um ARRAY de registros "nome,codusuario, faturamento, codsupervisor"
de linhas e colunas o case na clausula WHERE em algumas linguagens pode ser utilizado.
Para o seu caso não vejo a real necessidade:
1º são os mesmos campos na mesma tabela;
2º o cursor para estes registros não precisa ser de um array;
3º o que é simples não precisa complicar...

SELECT usuario.nome
, usuario.codusuario
, usuario.fautramento
, usuario.codsupervisor
FROM usuario
WHERE ('#tFiltro#' = 'GERENTE')
OR (('#tFiltro#' = 'Supervisor')
AND ('#tFiltro2#' = usuario.codsupervisor))

Olá Boa noite a todos. este e o meu primeiro tópico no DevMedia e peço desculpas caso haja algo errado

Estou com problema em realizar uma consulta que usa uma variável enviada pelo BI para retornar mais de um resultado. Quando o filtro1 é igual a gerente a consulta me trás todos os usuários. Quando o filtro1 é igual a supervisor ela deve me trazer apenas os usuários que possuam o 'codsupervisor' igual ao valor do filtro2.

segue um exemplo da query
select case 
when '#tfiltro#' ='GERENTE'
then (select  nome,codusurario,faturamento,codsupervisor from usuario)
when '#tfiltro#' = 'Supervisor' then
(select  nome,codusurario,faturamento from usuario
where  codsupervisor = '#tfiltro2#')end

essa consulta da erro de "too many values" porque a clausula
CASE
aceita apenas um único valor.
Alguém ai pode me ajudar?
Responder

Mais Posts

Olá Moisés

No CASE casa When vai alterar o valor que vai aparecer na sua coluna, ai estou mostrando um exemplo que vai trazer o resultando de acordo com o filtro (JOB_ID ou MANAGER_ID) precisa saber exatamente o resultado desejado para poder montar o melhor script.

SELECT 
CASE
 WHEN job_id = 'IT_PROG' THEN Last_name
 WHEN manager_id = 100 THEN last_name
 ELSE last_name
END
FROM employees


att,

Responder
Recomendo o uso do decode (mesma coisa do case, só que é bem mais simples e enxuto de se usar!!!!)
Responder

06/03/2013

Moises Neto

Caro Jair Aqui funcionou corretamente. Muito obrigado pela ajuda!!

O "CASE" que você está utilizando está criando um ARRAY de registros "nome,codusuario, faturamento, codsupervisor"
de linhas e colunas o case na clausula WHERE em algumas linguagens pode ser utilizado.
Para o seu caso não vejo a real necessidade:
1º são os mesmos campos na mesma tabela;
2º o cursor para estes registros não precisa ser de um array;
3º o que é simples não precisa complicar...

SELECT usuario.nome
, usuario.codusuario
, usuario.fautramento
, usuario.codsupervisor
FROM usuario
WHERE ('#tFiltro#' = 'GERENTE')
OR (('#tFiltro#' = 'Supervisor')
AND ('#tFiltro2#' = usuario.codsupervisor))

Olá Boa noite a todos. este e o meu primeiro tópico no DevMedia e peço desculpas caso haja algo errado

Estou com problema em realizar uma consulta que usa uma variável enviada pelo BI para retornar mais de um resultado. Quando o filtro1 é igual a gerente a consulta me trás todos os usuários. Quando o filtro1 é igual a supervisor ela deve me trazer apenas os usuários que possuam o 'codsupervisor' igual ao valor do filtro2.

segue um exemplo da query
select case 
when '#tfiltro#' ='GERENTE'
then (select  nome,codusurario,faturamento,codsupervisor from usuario)
when '#tfiltro#' = 'Supervisor' then
(select  nome,codusurario,faturamento from usuario
where  codsupervisor = '#tfiltro2#')end

essa consulta da erro de "too many values" porque a clausula
CASE
aceita apenas um único valor.
Alguém ai pode me ajudar?
Responder

31/07/2013

José

Obrigado pelo retorno amigo, e já que duvida foi solucionada estou dando este tópico por concluído.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira