none
Usando Join com 3 tabelas RRS feed

  • 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 mesa
    select p.Num_Mesa, sum(i.preco_item) as soma
    from pedido p
    join contem c on p.Cod_pedido = c.Cod_Pedido

    join item i on c.Cod_Item = i.Cod_Item

    group by p.Num_Mesa


    Fabio Aragao

    segunda-feira, 7 de novembro de 2016 10:46

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
    segunda-feira, 7 de novembro de 2016 12:32

Todas as Respostas

  • Deleted
    segunda-feira, 7 de novembro de 2016 11:02
  • 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
    segunda-feira, 7 de novembro de 2016 11:03
  • 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

    segunda-feira, 7 de novembro de 2016 12:20
  • 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
    segunda-feira, 7 de novembro de 2016 12:32