Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PCerqueira

Contagem por 'secção'

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.