Usuário com melhor resposta
Problemas com COMPUTE e SUM

Pergunta
-
Olá pessoal, estou fazendo o seguinte SELECT:WITH Consulta AS (SELECT Compras.idCompra,Compras.idUsuario,Compras.idCesta,Compras.idPedido,Compras.idProduto,Compras.quantidade,Compras.estado,Compras.data,Pedidos.idPedido,Produtos.idProduto,Produtos.valor,Produtos.produto,SUM(Compras.quantidade * Produtos.valor) AS TotalFROM Compras, Pedidos, ProdutosWHEREPedidos.idPedido = '121'AND Pedidos.idPedido = Compras.idPedidoAND Produtos.idProduto = Compras.idProdutoGROUP BY Compras.idCompra,Compras.idUsuario,Compras.idCesta,Compras.idPedido,Compras.idProduto,Compras.quantidade,Compras.estado,Compras.data,Pedidos.idPedido,Produtos.idProduto,Produtos.valor,Produtos.produto)SELECT * FROM ConsultaCOMPUTE SUM(Total)--------e está dando o seguinte erro:Msg 8156, Level 16, State 1, Line 1 The column 'idPedido' was specified multiple times for 'Consulta'.Alguem pode me ajudar?
Respostas
-
Boa Tarde,
O problema não é com a cláusula COMPUTE mas com a definição de sua CTE. CTE, Views e Subqueries (Derived Table) necessitam de nomes específicos. No seu SELECT você chama a coluna idPedido duas vezes (uma da tabela Compras e outra da tabela Pedidos). Normalmente você poderia chamar de uma tabela só, mas mesmo que você chame de duas tabelas, você não pode manter o mesmo nome.
Nesse caso, você pode colocar um Alias. Ex:
Compras.IdPedido As IdPedidoCompra, Pedidos.IdPedido As IdPedidoPedido
Ou se preferir especifique as colunas da CTE. Ex:
With Consulta (Coluna1, Coluna2, Coluna3)
AS
(SELECT)
Como sugestão complementar (não está relacionado ao problema) eu sugeriria utilizar JOINs. Junções em cláusula WHERE não são recomendadas
[ ]s,
Gustavo
Todas as Respostas
-
Boa Tarde,
O problema não é com a cláusula COMPUTE mas com a definição de sua CTE. CTE, Views e Subqueries (Derived Table) necessitam de nomes específicos. No seu SELECT você chama a coluna idPedido duas vezes (uma da tabela Compras e outra da tabela Pedidos). Normalmente você poderia chamar de uma tabela só, mas mesmo que você chame de duas tabelas, você não pode manter o mesmo nome.
Nesse caso, você pode colocar um Alias. Ex:
Compras.IdPedido As IdPedidoCompra, Pedidos.IdPedido As IdPedidoPedido
Ou se preferir especifique as colunas da CTE. Ex:
With Consulta (Coluna1, Coluna2, Coluna3)
AS
(SELECT)
Como sugestão complementar (não está relacionado ao problema) eu sugeriria utilizar JOINs. Junções em cláusula WHERE não são recomendadas
[ ]s,
Gustavo
-
-
Olá Eduardo,
Eu sugiro que você dê uma olhada no programa MSDN Experience.
Nesse programa fiz um vídeos de pouco mais de uma hora explicando o funcionamento dos JOINs.
Vale a pena dar uma conferida. O link para o programa MSDN Experience de SQL Server é:
http://www.microsoft.com/brasil/msdn/experience/default.mspx
[ ]s,
Gustavo