Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
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
")
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.
Não sei o que tem de errado, fiz idêntico vc postou e mesmo assim a query retorna vazia.
Não tenho como testar a query , fiz apenas uma ideia básica
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 !?