Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1179
Assunto : SQL Server
Titulo: Utilizando múltiplas CTE's na mesma query

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon




As CTE's, que surgiram no SQL Server 2005, são uma síntaxe muito útil para simplificar queries complexas que poderiam exigir muitas sub-queries.

Mas existem truques de síntaxe pouco habituais que tornam a forma de escrita ainda mais interessante. Um deles é a possibilidade de utilizar múltiplas CTE's na mesma query.

A query abaixo, por exemplo, é utilizada para recuperar o total das compras de cada cliente, ao lado da média de compras geral e a diferença do que o cliente comprou para a média.

Sem utilizar nenhuma CTE, veja como fica a query:


select customerid,sum(quantity * unitprice) total,
(select avg(total) from
(select customerid,sum(quantity * unitprice) total
from orders a,[order details] b where a.orderid=b.orderid
group by customerid) x) media,
sum(quantity * unitprice) -
(select avg(total) from
(select customerid,sum(quantity * unitprice) total
from orders a,[order details] b where a.orderid=b.orderid
group by customerid) x) Diferenca
from orders a,[order details] b where a.orderid=b.orderid
group by customerid

Pode-se observar na query acima a grande repetição de trechos, em especial o cálculo da média. As CTE's evitam exatamente esse tipo de repetição, mas para esse caso a melhor simplificação será utilizar múltiplas CTE's na mesma query.

Veja como fica :


with qry as
(select customerid,sum(quantity * unitprice) total
from orders a,[order details] b where a.orderid=b.orderid
group by customerid),
qryMedia as (select avg(total) Media from qry)
select *,total-media Diferenca from qry, qryMedia

A primeira CTE (qry) calcula o total de compras por cliente. A 2a CTE (qryMedia), faz o cálculo da média geral e por fim a query faz um cross join entre as duas para gerar o resultado final. Observe a síntaxe para unir 2 CTE’s : Não se repete o ‘With’, apenas se utiliza uma virgula separando as CTE’s

Veja mais detalhes em http://cidadaocarioca.blogspot.com.br/2015/02/utilizando-multiplas-ctes-na-mesma-query.html


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br