Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PCerqueira

Contagem por 'secção'

Mensagens Recomendadas

PCerqueira

Boas a todos!

Mais uma vez, surgiu um problema:

Eu quero fazer uma contagem aos registos que me aparecem, mas que faça uma contagem por 'secção'. EU vou dar um exemplo para tentar ficar mais fácil de perceber:

Seccao1

Alberto     

André       

Maria       

Seccao2

Manuel

Manuel

Rui

Sandra

Sandra

Seccao3

Ana

Bárbara

Deste exemplo eu queria que me aparecesse algo como:

Seccao1        Contagem

Alberto            3

André              3

Maria              3 

Seccao2

Manuel            3

Manuel            3

Rui                  3

Sandra            3

Sandra            3

Seccao3

Ana                  2

Bárbara            2

(Sim, está um bocadinho desalinhado, mas não importa isso.)

Alguém pode ajudar? Desde já o meu obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Ora bem, eu tentei algo como isto:

select t.nome, t.SeccaoN, t.SeccaoD, t.no, t.mes, t.contagem
,(case  t.mes when 1 then (t.TotArt1)else 0 end) as TotArt1Jan
,(case  t.mes when 2 then (t.TotArt1)else 0 end) as TotArt1Fev
,(case  t.mes when 3 then (t.TotArt1)else 0 end) as TotArt1Mar
,(case  t.mes when 4 then (t.TotArt1)else 0 end) as TotArt1Abr
,(case  t.mes when 5 then (t.TotArt1)else 0 end) as TotArt1Mai
,(case  t.mes when 6 then (t.TotArt1)else 0 end) as TotArt1Jun
,(case  t.mes when 1 then (t.TotArt2)else 0 end) as TotArt2Jan
,(case  t.mes when 2 then (t.TotArt2)else 0 end) as TotArt2Fev
,(case  t.mes when 3 then (t.TotArt2)else 0 end) as TotArt2Mar
,(case  t.mes when 4 then (t.TotArt2)else 0 end) as TotArt2Abr
,(case  t.mes when 5 then (t.TotArt2)else 0 end) as TotArt2Mai
,(case  t.mes when 6 then (t.TotArt2)else 0 end) as TotArt2Jun
from
(select pr.no as 'No', pr.nome as 'Nome', e1.estab as 'SeccaoN', e1.nomabrv as 'SeccaoD', month(Data) as Mes,
(Select count (distinct (pr.no))
from pr inner join prh on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo 
where (hshe.cm = '222' or hshe.cm = '223' or hshe.cm = '201' or hshe.cm = '202' or hshe.cm = '206' or 
hshe.cm = '207' OR hshe.cm = '220' or hshe.cm = '221' or hshe.cm = '205' or hshe.cm = '209' or 
hshe.cm = '224' or hshe.cm = '225' or hshe.cm = '226' or hshe.cm = '210' or hshe.cm = '203' or 
hshe.cm = '204' or hshe.cm = '228' or hshe.cm = '229' or hshe.cm = '222' or hshe.cm = '223') and year(data)= '2010') as 'Contagem',
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '201' or hshe.cm = '202' or hshe.cm = '206' or hshe.cm = '207' OR hshe.cm = '220' or hshe.cm = '221' or hshe.cm = '222' or hshe.cm = '223')and year(data)= '2010') as 'DUteis',
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '205' or hshe.cm = '209' or hshe.cm = '224' or hshe.cm = '225' or hshe.cm = '226' or hshe.cm = '210')and year(data)= '2010') as 'DDFeriados',
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '203' or hshe.cm = '204' or hshe.cm = '228' or hshe.cm = '229')and year(data)= '2010') as 'DDObrg', 
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '222' or hshe.cm = '223') and year(data)= '2010') as 'TotDUteis',
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '222' or hshe.cm = '223' or hshe.cm = '201' or hshe.cm = '202' or hshe.cm = '206' or hshe.cm = '207' OR hshe.cm = '220' or hshe.cm = '221' or hshe.cm = '205' or hshe.cm = '209' or hshe.cm = '224' or hshe.cm = '225' or hshe.cm = '226' or hshe.cm = '210' or hshe.cm = '203' or hshe.cm = '204' or hshe.cm = '228' or hshe.cm = '229') and year(data)= '2010') as 'TotArt1',
(select isnull(sum(prh.heqt),0) from prh inner join pr on pr.prstamp=prh.prstamp inner join hshe on prh.hetn = hshe.codigo where (hshe.cm = '222' or hshe.cm = '223') and year(data)= '2010') as 'TotArt2'
from pr (nolock) inner join prh (nolock) on prh.prstamp = pr.prstamp inner join e1 on e1.estab=pr.estab
where year(data)= '2010'
Group by pr.no, pr.nome, e1.estab, e1.nomabrv, pr.data) t
group by t.nome, t.SeccaoN, t.SeccaoD, t.DUteis, t.DDFeriados, t.DDObrg, t.TotDUteis, t.TotArt1, t.TotArt2, t.no, t.mes, t.contagem

Ele aqui dá-me bem, mas eu não sei se assim está completamente bem; Ou seja, se a query funciona para todas as situações.

Por isso queria que me dessem a vossa 'opinião', para confirmar. Com a vossa ajuda seria muito mais fácil.

Nota: Pr, prh, hshe e tudo com nomes assim são parecidos, são tabelas.

                  Cm, heqt e etc's são os respectivos campos.

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

Eia que testamento  :) .

Ajudava saber mais detalhes, mas penso que o que precisas é algo do género:

SELECT Count (Tabela.Secção1 As Secção1)

Tens é que adaptar isto ao que precisas.

Cumprimentos.


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.