DUVIDA SELECT - Count em 1 campo mostrando em varias colunas

Oracle

10/09/2014

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

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

10/09/2014

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.
GOSTEI 0
Camilo Oliveira

Camilo Oliveira

10/09/2014

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?
GOSTEI 0
Alisson Santos

Alisson Santos

10/09/2014

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.
GOSTEI 0
Lourival Queiroz

Lourival Queiroz

10/09/2014

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

GOSTEI 0
Adriano Gomes

Adriano Gomes

10/09/2014

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
GOSTEI 0
Camilo Oliveira

Camilo Oliveira

10/09/2014

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..
GOSTEI 0
POSTAR