Fórum Order BY em Select com Union #60288
11/11/2008
0
Por gentileza, analise o SQL e me ajude com alguma dica.
SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE,
CAST(SUM(VENDAMESTRE.TOTALVENDA) AS FLOAT) AS TOTAL_VENDIDO FROM VENDAMESTRE INNER JOIN CLIENTES ON (VENDAMESTRE.CLIENTE=CLIENTES.CODIGO)
GROUP BY 1, 2
UNION ALL
SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE,
CAST(SUM(SERVICOMESTRE.TOTALFINAL) AS FLOAT) AS TOTAL_VENDIDO FROM SERVICOMESTRE INNER JOIN CLIENTES ON (SERVICOMESTRE.CLIENTE=CLIENTES.CODIGO)
GROUP BY 1, 2
ORDER BY 3 //tanto faz qual dessas duas linhas eu
ORDER BY 3 DESC //colocar no SQL. Ambas darão a mesma ordem.
Obrigado.
Armindo
Curtir tópico
+ 0Posts
11/11/2008
Emerson Nascimento
SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE, (SELECT CAST(COALESCE(SUM(VENDAMESTRE.TOTALVENDA),0) AS FLOAT) FROM VENDAMESTRE WHERE VENDAMESTRE.CLIENTE=CLIENTES.CODIGO) + (SELECT CAST(COALESCE(SUM(SERVICOMESTRE.TOTALFINAL),0) AS FLOAT) FROM SERVICOMESTRE WHERE SERVICOMESTRE.CLIENTE=CLIENTES.CODIGO) AS TOTAL_VENDIDO FROM CLIENTES ORDER BY 3
ORDER BY 3 DESC
Gostei + 0
12/11/2008
Armindo
Com essa sua instrução funciona se mudar ´ORDER BY 3´ para ´ORDER BY TOTAL_VENDIDO´, mas a consulta fica leeeeeeeeenta, super lenta. Acho que é por causa dos subSelects.
Será que não existe uma forma de utilizar o Join?
Obrigado.
SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE, (SELECT CAST(COALESCE(SUM(VENDAMESTRE.TOTALVENDA),0) AS FLOAT) FROM VENDAMESTRE WHERE VENDAMESTRE.CLIENTE=CLIENTES.CODIGO) + (SELECT CAST(COALESCE(SUM(SERVICOMESTRE.TOTALFINAL),0) AS FLOAT) FROM SERVICOMESTRE WHERE SERVICOMESTRE.CLIENTE=CLIENTES.CODIGO) AS TOTAL_VENDIDO FROM CLIENTES ORDER BY 3
ORDER BY 3 DESC
Gostei + 0
12/11/2008
Emerson Nascimento
Gostei + 0
12/11/2008
Armindo
Realmente, criando um índice secundário, a demora diminui sensivelmente.
Só que agora surgiu outro problema: a instrução traz todos os clientes, quando deveria listaar apenas aqueles que têm vendas.
obrigado.
Gostei + 0
08/12/2008
Webjoel
SELECT CODIGO, NOME_CLIENTE, TOTAL_VENDIDO, FROM ( SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE, CAST(SUM(VENDAMESTRE.TOTALVENDA) AS FLOAT) AS TOTAL_VENDIDO FROM VENDAMESTRE INNER JOIN CLIENTES ON (VENDAMESTRE.CLIENTE=CLIENTES.CODIGO) UNION ALL SELECT CLIENTES.CODIGO, CLIENTES.NOME AS NOME_CLIENTE, CAST(SUM(SERVICOMESTRE.TOTALFINAL) AS FLOAT) AS TOTAL_VENDIDO FROM SERVICOMESTRE INNER JOIN CLIENTES ON (SERVICOMESTRE.CLIENTE=CLIENTES.CODIGO) ) ORDER BY TOTAL_VENDIDO DESC
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)