logo DevMedia  
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos

Edição do Mês
  Fórum DevMedia
Fórum de Discussão
Conheça também o NOVO fórum da DevMedia, no endereço: www.devmedia.com.br/forum
O novo fórum possui diversas vantagens! Saiba mais em
www.devmedia.com.br/articles/viewcomp.asp?comp=14726
Estamos sempre trabalhando na melhora do site como um todo! Bons códigos!
Equipe DevMedia

 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos  RegistrarRegistrar   
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 
Edição do Mês

SUM/GROUP BY ENTRE 2 TABELAS
 
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> MySQL
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
leandroblue
Novato


Registrado em: Terça-Feira, 16 de Setembro de 2008
Mensagens: 1

MensagemEnviada: Qua Set 17, 2008 10:47 am    Assunto: SUM/GROUP BY ENTRE 2 TABELAS Responder com Citação

DESEJO SABER A SOMA DOS VALORES DE CADA PEDIDO E CONFRONTAR COM A SOMA DOS VALORES DOS RECIBOS(ITENS) PARA CADA UM DESTES PEDIDOS. MINHA QUERY (UNIFICADA) FUNCIONA QDO TENH OUM PEDIDO E UM RECIBO, PORÉM ESTA DANDO ALGUM ERRO NO GROUP BY QDO TENHO MAIS DE UM RECIBO PARA O MESMO PEDIDO. se julgarem pertinente a tabela recibo, favor pedir.
SE ALGUÉM SE PRONTIFICAR A AJUDAR SEREI MUITO GRATO.

C?o:

###############################################
# assim funciona separadamente
SELECT
                p.id_pedido,
                SUM(p.tx_assessoria+p.tx_agendamento+
                    p.tx_consular+
                    p.tx_urgencia+
                    p.tx_extra)AS V_Pedido
                FROM pedido p
                GROUP BY p.id_pedido

SELECT
                r.id_pedido,
                SUM(r.tx_assessoria+
                    r.tx_agendamento+
                    r.tx_consular+
                    r.tx_urgencia+
                    r.tx_extra)AS V_Recibo
                FROM recibo_item r
                GROUP BY r.id_pedido
###############################################
# gostaria assim: tentativa unificada
           SELECT
                p.id_pedido,
                (SELECT nome       FROM passageiro pa WHERE (pa.id_passageiro=p.id_passageiro)) AS Passageiro,
                (SELECT passaporte FROM passageiro pa WHERE (pa.id_passageiro=p.id_passageiro)) AS Passaporte,
                IFNULL(
                SUM(p.tx_assessoria+p.tx_agendamento+
                    p.tx_consular+
                    p.tx_urgencia+
                    p.tx_extra),0)AS V_Pedido,
                IFNULL(
                SUM(r.tx_assessoria+
                    r.tx_agendamento+
                    r.tx_consular+
                    r.tx_urgencia+
                    r.tx_extra),0)AS V_Recibo,
                IFNULL(
                SUM(r.tx_assessoria+
                    r.tx_agendamento+
                    r.tx_consular+
                    r.tx_urgencia+
                    r.tx_extra
                    -(p.tx_assessoria+
                    p.tx_agendamento+
                    p.tx_consular+
                    p.tx_urgencia+
                    p.tx_extra)),
                    -(p.tx_assessoria+
                      p.tx_agendamento+
                      p.tx_consular+
                      p.tx_urgencia+
                      p.tx_extra)) AS Diferenca
                FROM pedido p
                INNER JOIN recibo_item r ON ((p.id_pedido = r.id_pedido AND
                                                  (r.tx_assessoria+
                                                   r.tx_agendamento+
                                                   r.tx_consular+
                                                   r.tx_urgencia+
                                                   r.tx_extra
                                                   -(p.tx_assessoria+
                                                   p.tx_agendamento+
                                                   p.tx_consular+
                                                   p.tx_urgencia+
                                                   p.tx_extra) != 0))
                )
                GROUP BY r.id_pedido, p.id_pedido

C?o:

CREATE TABLE passageiro (
  id_passageiro int(11) NOT NULL auto_increment,
  id_main int(11) default NULL,
  nome varchar(50) NOT NULL,
  endereco varchar(50) default NULL,
  complemento varchar(30) default NULL,
  cep varchar(10) default NULL,
  email varchar(50) default NULL,
  data_nasc date default NULL,
  cpf varchar(15) default NULL,
  passaporte varchar(15) default NULL,
  validade_passaporte date default NULL,
  fone_residencial varchar(15) default NULL,
  fone_celular_1 varchar(15) default NULL,
  fone_celular_2 varchar(15) default NULL,
  fone_comercial_1 varchar(15) default NULL,
  ramal_1 varchar(5) default NULL,
  fone_comercial_2 varchar(15) default NULL,
  ramal_2 varchar(5) default NULL,
  local_emissao varchar(35) default NULL,
  sexo varchar(10) NOT NULL,
  ocupacao varchar(50) default NULL,
  local_ocupacao varchar(50) default NULL,
  PRIMARY KEY  (id_passageiro),
  KEY nome (nome,data_nasc,passaporte)
) ENGINE=InnoDB AUTO_INCREMENT=336 DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

CREATE TABLE pedido (
  id_pedido int(11) NOT NULL auto_increment,
  id_destino int(11) NOT NULL,
  id_passageiro int(11) NOT NULL,
  id_entidade int(11) NOT NULL,
  id_finalidade int(11) NOT NULL,
  id_status int(11) NOT NULL,
  tx_agendamento_num varchar(30) default NULL,
  tx_assessoria float(15,2) default NULL,
  tx_agendamento float(15,2) default NULL,
  tx_consular float(15,2) default NULL,
  tx_urgencia float(15,2) default NULL,
  tx_extra float(15,2) default NULL,
  dt_pedido date NOT NULL,
  hr_pedido varchar(5) NOT NULL,
  dt_viagem date default NULL,
  dt_entrevista date default NULL,
  dt_emissao date default NULL,
  dt_expiracao date default NULL,
  obs longtext,
  obs_ent longtext,
  PRIMARY KEY  (id_pedido),
  KEY idx_FK3 (id_destino),
  KEY idx_FK4 (id_status),
  KEY idx_FK6 (id_entidade),
  KEY idx_FK7 (id_passageiro),
  KEY idx_FK9 (id_finalidade)
) ENGINE=InnoDB AUTO_INCREMENT=225 DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

CREATE TABLE recibo_item (
  id_recibo_item int(11) NOT NULL auto_increment,
  id_recibo int(11) NOT NULL,
  id_pedido int(11) NOT NULL,
  tx_assessoria float(15,2) NOT NULL default '0.00',
  tx_agendamento float(15,2) NOT NULL default '0.00',
  tx_consular float(15,2) NOT NULL default '0.00',
  tx_urgencia float(15,2) NOT NULL default '0.00',
  tx_extra float(15,2) NOT NULL default '0.00',
  PRIMARY KEY  (id_recibo_item),
  KEY idx_FK13 (id_recibo),
  KEY idx_FK14 (id_pedido)
) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

INSERT INTO passageiro VALUES (1, 5, 'PASSAGEIRO 1', 'RUA DOS CATAVENTOS, 123', 'APTO 345', '90.810-897', 'leandro@gmail.com', '1981-12-21', '744.663.482-99', 'AB123', '2010-12-21', '51 3384-2302', '51 8144-2344', '', '', '', '', '', 'RS-PORTO ALEGRE', 'M', 'FUNCIONARIO', 'DMAEST'),
(2, 5, 'PASSAGEIRO 2', '', '', '', '', '0000-00-00', '', 'AC123', '2010-12-21', '', '', '', '', '', '', '', '', 'M', '', '');

INSERT INTO pedido (id_pedido, id_destino, id_passageiro, id_entidade, id_finalidade, id_status, tx_agendamento_num, tx_assessoria, tx_agendamento, tx_consular, tx_urgencia, tx_extra, dt_pedido, hr_pedido, dt_viagem, dt_entrevista, dt_emissao, dt_expiracao, obs, obs_ent) VALUES
(1, 1, 1, 1, 1, 6, '', 150.00, 100.00, 150.00, 100.00, 100.00, '2008-07-02', '21:58', '0000-00-00', '0000-00-00', '2008-07-22', '2008-07-01', 'teste','teste'),
(2, 2, 2, 2, 2, 6, '', 500.00, 50.00, 50.00, 50.00, 500.00, '2008-07-02', '22:13', '0000-00-00', '0000-00-00', '0000-00-00', '0000-00-00', 'teste', 'teste'),
(3, 2, 2, 2, 2, 6, '', 50.00, 0.00, 50.00, 0.00, 0.00, '2008-07-02', '22:17', '0000-00-00', '0000-00-00', '0000-00-00', '0000-00-00', 'teste', 'teste');

INSERT INTO recibo_item (id_recibo_item, id_recibo,id_pedido,tx_assessoria,tx_agendamento,tx_consular,tx_urgencia,tx_extra) VALUES
(1, 1, 1, 100.00, 100.00, 100.00, 100.00, 100.00),
(2, 2, 1, 50.00, 0.00, 50.00, 0.00, 0.00),
(3, 2, 2, 50.00, 0.00, 50.00, 0.00, 0.00),
(4, 3, 3, 50.00, 50.00, 50.00, 50.00, 50.00),
(5, 4, 3, 10.00, 0.00, 10.00, 0.00, 0.00);

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
D@niel
Novato


Registrado em: Terça-Feira, 6 de Janeiro de 2009
Mensagens: 8

MensagemEnviada: Qui Jan 22, 2009 9:36 am    Assunto: Responder com Citação

leandroblue, tente assim

C?o:
SELECT P.ID_PEDIDO,
       PA.NOME AS PASSAGEIRO,
       PA.PASSAPORTE,
               
       SUM( P.TX_ASSESSORIA + P.TX_AGENDAMENTO + P.TX_CONSULAR +
            P.TX_URGENCIA   + P.TX_EXTRA ) AS V_PEDIDO,

       SUM( R.TX_ASSESSORIA + R.TX_AGENDAMENTO + R.TX_CONSULAR +
            R.TX_URGENCIA   + R.TX_EXTRA ) AS V_RECIBO,
       
       (    SUM( P.TX_ASSESSORIA + P.TX_AGENDAMENTO + P.TX_CONSULAR +
                 P.TX_URGENCIA   + P.TX_EXTRA ) -
            SUM( R.TX_ASSESSORIA + R.TX_AGENDAMENTO + R.TX_CONSULAR +
                 R.TX_URGENCIA   + R.TX_EXTRA )
       ) AS DIF

FROM PEDIDO P
INNER JOIN PASSAGEIRO PA ON (PA.ID_PASSAGEIRO = P.ID_PASSAGEIRO)         
INNER JOIN RECIBO_ITEM R ON (P.ID_PEDIDO      = R.ID_PEDIDO)
GROUP BY R.ID_PEDIDO,
         P.ID_PEDIDO,
         PA.NOME,
         PA.PASSAPORTE
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> MySQL Todos os horários são GMT - 3 Hours
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB