Fórum DUVIDA SELECT - Count em 1 campo mostrando em varias colunas #491625

10/09/2014

0

Pessoal minha dúvida é o seguinte..
Tenho uma tabela GUIA, onde possuo vários campos mais vamos tratar dos 3 mais importantes: DATA, MEDICO e ORIGEM_EMISSAO. Esse campo ORIGEM_EMISSAO possui valores de 1 a 9 referente ao local que a guia foi emitida(PS. Esse campo não é FK de nenhuma tabela, não tem vinculo). Preciso fazer um indicador onde mostre quantas guias foram emitidas na WEB, PORTAL, OPERADORA...etc para um determinado medico durante um período. Consegui fazer esse indicador porem esta saindo em linhas, gostaria que saísse em colunas. Ex:

Periodo Medico qntguias
09/2014 JOSE 3 - web
09/2014 JOSE 4 - portal
09/2014 JOSE 1 - operadora


eu queria que fosse assim

Periodo Medico web portal operadora
09/2014 Jose 3 4 1


Não sei se deu pra entender..Mais é possível?

Obrigado a todos
Camilo Oliveira

Camilo Oliveira

Responder

Posts

10/09/2014

Joel Rodrigues

Eu acho que nesse caso você pode criar uma tabela temporária com as colunas Período, Medico e mais 9 colunas para os tipos, já que são fixos. Assim, basta fazer os selects e preencher essa tabela com os dados, depois fazer um select nessa tabela.
Responder

Gostei + 0

10/09/2014

Camilo Oliveira

Joel, obrigado pela resposta e desculpe mais sou bem leigo...estou iniciando agora

Teria como eu inserir na tabela temporaria o valor de origem para cada coluna da origem? Como?
Responder

Gostei + 0

10/09/2014

Alisson Santos

Passe a estrutura do seu banco que posso te auxiliar. A melhor maneira é utilizar o pivot que no caso ele já ordena da maneira que quer.
Não sei se precisaria de uma tabela temporária.
Se precisar pode me enviar no e-mail alisson@uniontecnologia.com.br que analiso e te mando a resposta pelo o fórum mesmo.
Responder

Gostei + 0

17/09/2014

Lourival Queiroz

Ai um exemplo co os dados que vc informou:

create table Guia_Med (
 Data date,
 Nome varchar2(20),
 Tipo varchar2(10),
 qtde number(6))
/
insert into guia_med values ('01/09/2014','JOSE','WEB',3);
insert into guia_med values ('01/09/2014','JOSE','PORTAL',4);
insert into guia_med values ('01/09/2014','JOSE','OPERADORA',1);
insert into guia_med values ('02/09/2014','JOSE','WEB',1);
insert into guia_med values ('02/09/2014','JOSE','PORTAL',6);
insert into guia_med values ('02/09/2014','JOSE','OPERADORA',9);
commit;


SELECT *
from (
SELECT Data,
       Nome,
       Tipo,
       sum(qtde) qtd
  FROM guia_med
 where to_char(Data,'yyyy') = '2014'
 GROUP BY Data, Nome, Tipo, to_char(Data,'mm')
)
PIVOT (SUM(QTD) AS QTD
       FOR (Tipo) IN ('WEB' AS Web, 'PORTAL' AS Portal, 'OPERADORA' AS Operadora))
order by Data,Nome

Responder

Gostei + 0

17/09/2014

Adriano Gomes

Seguindo o exemplo do Lourival Queiroz também pode fazer o select assim:

select Periodo
, Medico
, sum(WEB) as 'WEB'
, sum(PORTAL) as 'PORTAL'
, sum(OPERADORA) as 'OPERADORA'
from
(
select distinct Periodo
, Medico
, case Guias when 'WEB' then count(Guias) else 0 end as 'WEB'
, case Guias when 'PORTAL' then count(Guias) else 0 end as 'PORTAL'
, case Guias when 'OPERADORA' then count(Guias) else 0 end as 'OPERADORA'
from #Guia_Med
group by Periodo, Medico, Guias
) as Res
group by Periodo, Medico

fiz no T-SQL mas provavelmente é a mesma coisa no Oracle

um OFFTOPIC aqui: Lourival Queiroz como faço para quebrar a linha quando envio um código como você fez ai linha 1, 2, 3, 4... etc
aqui sai tudo na mesma linha então sempre mando como texto normal
Responder

Gostei + 0

17/09/2014

Camilo Oliveira

Pessoal, obrigado a todos que responderam. Achei uma solução que me atendeu aqui.
Vou postar abaixo para que vocês vejam...utilizei count(decode..

select decode(GROUPING(nome),1,'Total',nome) AS nome, t.desc_tipo,
count(DECODE (origem_emis, 1, cod_guia, NULL)) DESK,
count(DECODE (origem_emis, 8, cod_guia, NULL)) web,
count(DECODE (origem_emis, 9, cod_guia, NULL)) SAP
from guia g,
medico m,
tab_tipo_guia t
where g.cod_med_sdo = m.cod_medico
and g.dthr_emissao >= to_date('01/09/2014', 'dd/mm/yyyy')
and g.tipo_guia = t.tipo_guia
group by rollup(m.nome),t.desc_tipo


Valeu galera..
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar