none
DUPLICIDADE COM INNER JOIN RRS feed

  • Pergunta

  • Boa Noite Pessoal,

    Possuo o seguinte código:

    SELECT DISTINCT 
                          pedidos.COD_PEDIDO AS var_codped, pedidos.DATA_COMPRA, pedidos.SUBTOTAL, pedidos.ValorAcrescReal, pedidos.ValorDescReal, pedidos.TOTAL AS var_total, 
                          pedidos.TIPO_PAGAMENTO, pedidos.PAGAMENTO, pedidos.TIPO_PEDIDO, pedidos.COD_CLIENTE, cliente.Nome, parcelas.FORMA_PGTO AS pFormaPgto, 
                          parcelas.VALOR_FINAL AS pValorPgto, parcelas.TIPO_CARTAO, 
                          (CASE pedidos.TIPO_PAGAMENTO WHEN 'À Prazo' THEN pedidos.PAGAMENTO ELSE parcelas.FORMA_PGTO END) AS vTipoPgto
    FROM         pedidos INNER JOIN
                          cliente ON pedidos.COD_CLIENTE = cliente.CODIGO INNER JOIN
                          parcelas ON pedidos.COD_PEDIDO = parcelas.COD_PEDIDO
    WHERE     (MONTH(pedidos.DATA_COMPRA) = 1) AND (YEAR(pedidos.DATA_COMPRA) = 2021) AND (pedidos.TIPO_PEDIDO = 'VENDA') AND (pedidos.cancelado = '0') AND 
                          (pedidos.TIPO_PAGAMENTO IN ('À Vista', 'À prazo'))
    ORDER BY var_codped

    Um cruzamento entre minha tabela de pedidos e as parcelas de cada pedido.

    Porem se minha tabela Parcelas possuir mais de 1 parcela para o mesmo pedido... vai duplicar o pedido na exibição... ou seja, para cada parcela do mesmo pedido... gera uma linha.

    Quero que seja somente exibida 1 linha para cada pedido, independente a quantidade de parcelas que ele possui...

    Pensei que o DISTINCT resolveria, mais não...

    Tente o left join... também não

    Pensei no group by, porem agrupar campo por campo se tornaria horrivel

    Qual solução nesse caso?

    terça-feira, 12 de janeiro de 2021 03:21

Respostas

  • Resolvi assim:

    SELECT DISTINCT 
                          pedidos.COD_PEDIDO AS var_codped, pedidos.DATA_COMPRA, pedidos.SUBTOTAL, pedidos.ValorAcrescReal, pedidos.ValorDescReal, pedidos.TOTAL AS var_total, 
                          pedidos.TIPO_PAGAMENTO, pedidos.PAGAMENTO, pedidos.TIPO_PEDIDO, pedidos.COD_CLIENTE, cliente.Nome,
                              (SELECT     TOP (1) (CASE pedidos.TIPO_PAGAMENTO WHEN 'À Prazo' THEN pedidos.PAGAMENTO ELSE parcelas.FORMA_PGTO END) AS vTipoPgto
                                FROM          parcelas
                                WHERE      (COD_PEDIDO = pedidos.COD_PEDIDO)) AS Expr1
    FROM         pedidos INNER JOIN
                          cliente ON pedidos.COD_CLIENTE = cliente.CODIGO
    WHERE     (MONTH(pedidos.DATA_COMPRA) = 1) AND (YEAR(pedidos.DATA_COMPRA) = 2021) AND (pedidos.TIPO_PEDIDO = 'VENDA') AND (pedidos.cancelado = '0') AND 
                          (pedidos.TIPO_PAGAMENTO IN ('À Vista', 'À prazo'))
    ORDER BY var_codped

    • Marcado como Resposta WEBIERONLINE quarta-feira, 13 de janeiro de 2021 03:27
    quarta-feira, 13 de janeiro de 2021 03:27

Todas as Respostas

  • Bom dia,

    Se houverem valores diferentes nas colunas da tabela parcelas que são retornadas pela consulta, o resultado apresentara mais de uma linha para o mesmo pedido. Para que isso não ocorra os valores teriam que ser iguais, ou você teria que utilizar funções de agregação nessas colunas para obter um valor único, ou você teria que retornar somente os dados de uma determinada parcela.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 12 de janeiro de 2021 12:25
  • Bom dia,

    Se houverem valores diferentes nas colunas da tabela parcelas que são retornadas pela consulta, o resultado apresentara mais de uma linha para o mesmo pedido. Para que isso não ocorra os valores teriam que ser iguais, ou você teria que utilizar funções de agregação nessas colunas para obter um valor único, ou você teria que retornar somente os dados de uma determinada parcela.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    amigo e como seria:

    retornar somente os dados de uma determinada parcela ?

    Tem como dar um exemplo?

    terça-feira, 12 de janeiro de 2021 21:13
  • Resolvi assim:

    SELECT DISTINCT 
                          pedidos.COD_PEDIDO AS var_codped, pedidos.DATA_COMPRA, pedidos.SUBTOTAL, pedidos.ValorAcrescReal, pedidos.ValorDescReal, pedidos.TOTAL AS var_total, 
                          pedidos.TIPO_PAGAMENTO, pedidos.PAGAMENTO, pedidos.TIPO_PEDIDO, pedidos.COD_CLIENTE, cliente.Nome,
                              (SELECT     TOP (1) (CASE pedidos.TIPO_PAGAMENTO WHEN 'À Prazo' THEN pedidos.PAGAMENTO ELSE parcelas.FORMA_PGTO END) AS vTipoPgto
                                FROM          parcelas
                                WHERE      (COD_PEDIDO = pedidos.COD_PEDIDO)) AS Expr1
    FROM         pedidos INNER JOIN
                          cliente ON pedidos.COD_CLIENTE = cliente.CODIGO
    WHERE     (MONTH(pedidos.DATA_COMPRA) = 1) AND (YEAR(pedidos.DATA_COMPRA) = 2021) AND (pedidos.TIPO_PEDIDO = 'VENDA') AND (pedidos.cancelado = '0') AND 
                          (pedidos.TIPO_PAGAMENTO IN ('À Vista', 'À prazo'))
    ORDER BY var_codped

    • Marcado como Resposta WEBIERONLINE quarta-feira, 13 de janeiro de 2021 03:27
    quarta-feira, 13 de janeiro de 2021 03:27