Ir para o conteúdo
mr.ice

Consulta: Obter registos que só têm uma linha

Mensagens Recomendadas

mr.ice    0
mr.ice

Boas.

Tenho a seguinte consulta

SELECT COUNT(DISTINCT (CASE clientes.sexo WHEN "M" THEN clientes.id END)) as NUtenteM, 
COUNT(DISTINCT (CASE clientes.sexo WHEN "F" THEN clientes.id END)) as NUtenteF ,
COUNT( (CASE clientes.sexo WHEN "M" THEN servicosprestados_elementos.idcliente END)) as NAtendimentosM ,
COUNT( (CASE clientes.sexo WHEN "F" THEN servicosprestados_elementos.idcliente END)) as NAtendimentosF
FROM clientes 
LEFT JOIN servicosprestados_elementos ON servicosprestados_elementos.idcliente = clientes.id
LEFT JOIN servicosprestados ON servicosprestados.id = clientes_servicosprestadosfamilia_elementos.idservicoprestado 
WHERE idservico=9 and processoanulado=0 and servicosprestados.anulado=0 AND ((DATE(servicosprestados.datainicio) >= '2012-01-01' OR '2012-01-01' <= DATE(servicosprestados.datafim)) 
AND DATE(servicosprestados.datainicio) <= '2012-02-01') 

Precisava que ele efectuasse a consulta à tabela servicosprestados e que devolvesse os clientes que têm servicosprestados sozinhos, ou seja que count(idcliente) por idservicoprestado=1

Cliente           Servicosprestados       servicosprestados_elementos

id                             id                                                 id

nome                     idcliente                                   idservicoprestado (chaveexterna servicosprestados id)

sexo                              idservico                               idcliente

Penso que poderia ser por um groupby, mas quando o faço altera-me o resultados dos dados obtidos.

Obrigado desde já--

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jorgepinho    0
jorgepinho

pois é... parecia mais código...

A ideia é alterar este query ? ou fazer um novo ?

se fôr um novo... que tal assim (não testado):

SELECT c.id, c.nome FROM cliente c 
INNER JOIN servicosprestados sp ON c.id = sp.idcliente
GROUP BY c.id, c.nome
HAVING COUNT(sp.id) = 1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mr.ice    0
mr.ice

eu isso consigo fazer..

Eu agora quero contar quantos clientes distribuidos por sexo, e quantos servicosprestados distribuidos por sexo..

Não sei se fui claro..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mr.ice    0
mr.ice

Penso que cheguei a solução com a ajuda deste link

http://stackoverflow.com/questions/579175/complex-join-with-nested-group-by-having-clause

A solução passo por criar a query na união..

SELECT 
COUNT(DISTINCT (CASE clientes.sexo WHEN "M" THEN clientes.id END)) as CM, 
COUNT(DISTINCT (CASE clientes.sexo WHEN "F" THEN clientes.id END)) as CF ,
COUNT((CASE clientes.sexo WHEN "M" THEN temp.idcliente END)) AS AM ,
COUNT((CASE clientes.sexo WHEN "F" THEN temp.idcliente END)) AS AF 
FROM clientes 
INNER JOIN (select distinct idcliente, idservicoprestado
from servicosprestados_elementos
group by idservicoprestado
having count(idservicoprestado)=1) AS temp ON temp.idcliente=clientes.id
INNER JOIN servicosprestados ON temp.idservicoprestado= servicosprestados.id 
WHERE ((DATE(servicosprestados.datainicio) >= '2012-01-01' OR '2012-01-01' <= DATE(servicosprestados.datafim)) 
AND DATE(servicosprestados.datainicio) <= '2012-01-31')

Partilhar esta mensagem


Link 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