Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

juliano1613

Consulta SQL

Recommended Posts

Por favor me ajudem, tenho essa consulta sql abaixo, mas ela não esta fazendo o que eu queria. Bem eu queria que ela contasse quando o valor dentro da coluna modalidade fosse igual a um valor X , porem ela esta contando tudo independente do valor que esta na modalidade. Por exemplo: UM determinado usuário tem:

3 registros com modalidade = 19

2 registros com modalidade = 20

1 regustro com modalidade = 21.

 

Eu quero que ele me mostre :

 

3 registros com modalidade = 19

2 registros com modalidade = 20

1 regustro com modalidade = 21.

 

Porem ele esta me mostrando:

 

6 resgistros com modalidade = 19.

 

Me ajudem por favor:

 

SELECT
(CASE WHEN D.modalidade = '14' THEN COUNT(D.VALOR)END) AS conta_limite,
(CASE WHEN D.modalidade = '15' THEN COUNT(D.VALOR)END) AS conta_cdc,
(CASE WHEN D.modalidade = '19' THEN COUNT(D.VALOR)END) AS conta_sms,

(CASE WHEN D.modalidade = '14' THEN SUM(D.VALOR)END) AS soma_limite,
(CASE WHEN D.modalidade = '15' THEN SUM(D.VALOR)END) AS soma_cdc,
(CASE WHEN D.modalidade = '19' THEN SUM(D.VALOR)END) AS soma_sms,


(CASE WHEN D.produto = '2' THEN COUNT(D.VALOR)END) AS conta_consorcio,
(CASE WHEN D.produto = '4' THEN COUNT(D.VALOR)END) AS conta_consignado,
(CASE WHEN D.produto = '1' THEN COUNT(D.VALOR)END) AS conta_seguro,

(CASE WHEN D.produto = '2' THEN SUM(D.VALOR)END) AS soma_consorcio,
(CASE WHEN D.produto = '4' THEN SUM(D.VALOR)END) AS soma_consignado,
(CASE WHEN D.produto = '1' THEN SUM(D.VALOR)END) AS soma_seguro,
(CASE WHEN D.produto = '1' THEN SUM(D.receita_coop)END) AS soma_prolabore,

SUM(D.receita_coop + D.valor) AS soma_total,



D.produto, D.modalidade,
U.nome, U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore

FROM produtividade_diaria D
INNER JOIN usuarios U

ON (D.vendedor = U.id)


WHERE year(D.data) = '2015' and
month(D.data) = '$mes' and
U.pa = '$pa' and
D.situacao = 'Efetivado'
GROUP BY D.vendedor
ORDER BY soma_total
DESC LIMIT 100

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente ...

 

 

...

SUM(CASE WHEN D.modalidade = '19' THEN 1 EKSE 0 END) AS conta_sms,

SUM(CASE WHEN D.modalidade = '14' THEN D.VALOR) ELSE 0 END) AS soma_limite,

...

 

Lembrando que o CASE vai "pivotear" teu resultado, é isto !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso . Muito obrigado, mas já aproveitando de sua boa vontade eu queria fazer uma outra consulta para me mostrar todos os demais usuários da tabela usuários , que não possuem nenhuma venda , ou seja tem o 'id' na tabela 'usuários' mas não tem o 'id' na tabela 'Produtividade_diária', que no caso o id esta na coluna 'vendedor'. Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta , O link que você me passou me deu uma ideia de como é feito , mas mesmo assim não consegui, veja a query e abaixo, tenho uma consulta que verifica na tabela 'USUARIOS' qual usuário esta na tabela 'PRODUTIVIDADE_DIARIA ' e me retorna todos os vendedores, porem quero fazer uma que retorna todos os usuários que não venderam , ou seja esta na tabela 'USUARIOS' mas não esta na tabela 'PRODUTIVIDADE_DIARIA '. Como eu faço isso ? . Desde já obrigado.

 

 

$busca_vendedores = mysql_query("

 

 

 

SELECT

 

D.produto, D.modalidade,

U.nome, U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore, D.data

 

 

 

FROM produtividade_diaria D

 

INNER JOIN usuarios U

 

ON (D.vendedor = U.id)

 

 

WHERE

 

 

 

year(D.data) = '2015' and

month(D.data) = '$mes' and

U.pa = '$pa' and

 

D.situacao = 'Efetivado'

 

GROUP BY D.vendedor

ORDER BY soma_total

DESC LIMIT 100

 

 

 

")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algo assim

select produto , modalidade , data , sum(valor)
from
(
SELECT
D.produto, D.modalidade,
U.nome, --U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore,
D.data , d.valor
FROM produtividade_diaria D
INNER JOIN usuarios U
ON (D.vendedor = U.id)
WHERE
year(D.data) = '2015' and
month(D.data) = '$mes' and
U.pa = '$pa' and
D.situacao = 'Efetivado'

union all

SELECT
' ' produto, ' ' modalidade,
U.nome, --U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore,
'01/01/15' data , 0 valor
FROM usuarios U
where
U.pa = '$pa'
) group by produto , modalidade , data

A ideia básica é criar uma sql "fajuta" com valores zerados e somar estes valores.

 

Veja outras ideais aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho como testar a query , fiz apenas uma ideia básica

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.