Usuário com melhor resposta
Usando Join com 3 tabelas

Pergunta
-
Bom dia pessoal
Estou aprendendo consultas em banco de dados e chegou a hora do Join com 3 tabelas.
Alguem poderia informar o que estou fazendo de errado por favor?
Quais mesas fizeram pedidos, e qual valor gasto por mesaselect p.Num_Mesa, sum(i.preco_item) as soma
from pedido pjoin contem c on p.Cod_pedido = c.Cod_Pedidojoin item i on c.Cod_Item = i.Cod_Item
group by p.Num_Mesa
Fabio Aragao
Respostas
-
Resolveu ??
segue o exemplo completo
DECLARE @Pedidos TABLE (
Cod_Pedido INT PRIMARY KEY,
NumeroMesa VARCHAR(MAX),
Cod_Garcon INT,
Hora_Pedido TIME,
Data_Pedido DATE
)
INSERT INTO @Pedidos
( Cod_Pedido ,
NumeroMesa ,
Cod_Garcon ,
Hora_Pedido ,
Data_Pedido
)
VALUES ( 1 , -- Cod_Pedido - int
'10' , -- NumeroMesa - varchar(max)
1 , -- Cod_Garcon - int
CAST(GETDATE() AS TIME) , -- Hora_Pedido - time
GETDATE() -- Data_Pedido - date
),
( 2 , -- Cod_Pedido - int
'20' , -- NumeroMesa - varchar(max)
1 , -- Cod_Garcon - int
CAST(GETDATE() AS TIME) , -- Hora_Pedido - time
GETDATE() -- Data_Pedido - date
)
DECLARE @Contem TABLE (
Cod_Pedido INT PRIMARY KEY,
Cod_Item INT ,
QUantidade INT
)
INSERT INTO @Contem
( Cod_Pedido, Cod_Item, Quantidade )
VALUES ( 1,100, 3 ),( 2,200, 7 )
DECLARE @Itens TABLE (
Cod_Item INT PRIMARY KEY,
NomeItem VARCHAR(MAX),
Tipo_Item VARCHAR(MAX),
Medida VARCHAR(MAX),
Descricao VARCHAR(MAX),
PrecoItem DECIMAL(18,2)
)
INSERT INTO @Itens
( Cod_Item ,
NomeItem ,
Tipo_Item ,
Medida ,
Descricao ,
PrecoItem
)
VALUES ( 100 , -- Cod_Item - int
'Picanha Gratinada' , -- NomeItem - varchar(max)
'Gratinados' , -- Tipo_Item - varchar(max)
'porção' , -- Medida - varchar(max)
'Picanha Gratinada' , -- Descricao - varchar(max)
90 -- PrecoItem - decimal
),
( 200 , -- Cod_Item - int
'Suco de Laranja' , -- NomeItem - varchar(max)
'Sucos' , -- Tipo_Item - varchar(max)
'Copo' , -- Medida - varchar(max)
'Sucos' , -- Descricao - varchar(max)
3 -- PrecoItem - decimal
)
SELECT P.NumeroMesa, [Valor Gasto por Mesa]= SUM(I.PrecoItem * C.QUantidade) FROM @Pedidos AS P
JOIN @Contem AS C ON C.Cod_Pedido = P.Cod_Pedido
JOIN @Itens AS I ON I.Cod_Item = C.Cod_Item
GROUP BY P.NumeroMesa
Wesley Neves
- Marcado como Resposta Fabio Aragao segunda-feira, 7 de novembro de 2016 15:41
Todas as Respostas
-
-
A tabela Contem e associativa, para vc conseguir saber o valor gasto por mesa terá que somar os Preços dos Items(Tabela Items) multiplicado pela Quantidade pedida (tabela Contem), segue um exemplo
DECLARE @Pedidos TABLE ( Cod_Pedido INT PRIMARY KEY, NumeroMesa VARCHAR(MAX), Cod_Garcon INT, Hora_Pedido TIME, Data_Pedido DATE ) DECLARE @Contem TABLE ( Cod_Pedido INT PRIMARY KEY, Cod_Item INT , QUantidade INT ) DECLARE @Itens TABLE ( Cod_Item INT PRIMARY KEY, NomeItem VARCHAR(MAX), Tipo_Item VARCHAR(MAX), Medida VARCHAR(MAX), Descricao VARCHAR(MAX), PrecoItem DECIMAL(18,2) ) SELECT P.NumeroMesa, [Valor Gasto por Mesa]= SUM(I.PrecoItem * C.QUantidade) FROM @Pedidos AS P JOIN @Contem AS C ON C.Cod_Pedido = P.Cod_Pedido JOIN @Itens AS I ON I.Cod_Item = C.Cod_Item GROUP BY P.NumeroMesa
Wesley Neves
- Editado Wesley Neves segunda-feira, 7 de novembro de 2016 11:04 correção
-
Fábio, o que ocorreu de errado?
Me parece que é necessário somar o preço unitário do item pela quantidade de itens.
José Diz Belo Horizonte, MG - Brasil
Sim, so que a soma tambem está pegando uma informação incorreta.. nas somas...
Estou tentando subir a imagem da tabela com as informações e não estou conseguindo..
Fabio Aragao
-
Resolveu ??
segue o exemplo completo
DECLARE @Pedidos TABLE (
Cod_Pedido INT PRIMARY KEY,
NumeroMesa VARCHAR(MAX),
Cod_Garcon INT,
Hora_Pedido TIME,
Data_Pedido DATE
)
INSERT INTO @Pedidos
( Cod_Pedido ,
NumeroMesa ,
Cod_Garcon ,
Hora_Pedido ,
Data_Pedido
)
VALUES ( 1 , -- Cod_Pedido - int
'10' , -- NumeroMesa - varchar(max)
1 , -- Cod_Garcon - int
CAST(GETDATE() AS TIME) , -- Hora_Pedido - time
GETDATE() -- Data_Pedido - date
),
( 2 , -- Cod_Pedido - int
'20' , -- NumeroMesa - varchar(max)
1 , -- Cod_Garcon - int
CAST(GETDATE() AS TIME) , -- Hora_Pedido - time
GETDATE() -- Data_Pedido - date
)
DECLARE @Contem TABLE (
Cod_Pedido INT PRIMARY KEY,
Cod_Item INT ,
QUantidade INT
)
INSERT INTO @Contem
( Cod_Pedido, Cod_Item, Quantidade )
VALUES ( 1,100, 3 ),( 2,200, 7 )
DECLARE @Itens TABLE (
Cod_Item INT PRIMARY KEY,
NomeItem VARCHAR(MAX),
Tipo_Item VARCHAR(MAX),
Medida VARCHAR(MAX),
Descricao VARCHAR(MAX),
PrecoItem DECIMAL(18,2)
)
INSERT INTO @Itens
( Cod_Item ,
NomeItem ,
Tipo_Item ,
Medida ,
Descricao ,
PrecoItem
)
VALUES ( 100 , -- Cod_Item - int
'Picanha Gratinada' , -- NomeItem - varchar(max)
'Gratinados' , -- Tipo_Item - varchar(max)
'porção' , -- Medida - varchar(max)
'Picanha Gratinada' , -- Descricao - varchar(max)
90 -- PrecoItem - decimal
),
( 200 , -- Cod_Item - int
'Suco de Laranja' , -- NomeItem - varchar(max)
'Sucos' , -- Tipo_Item - varchar(max)
'Copo' , -- Medida - varchar(max)
'Sucos' , -- Descricao - varchar(max)
3 -- PrecoItem - decimal
)
SELECT P.NumeroMesa, [Valor Gasto por Mesa]= SUM(I.PrecoItem * C.QUantidade) FROM @Pedidos AS P
JOIN @Contem AS C ON C.Cod_Pedido = P.Cod_Pedido
JOIN @Itens AS I ON I.Cod_Item = C.Cod_Item
GROUP BY P.NumeroMesa
Wesley Neves
- Marcado como Resposta Fabio Aragao segunda-feira, 7 de novembro de 2016 15:41