Ir para conteúdo
rcamu

Select duplicando as linhas

Recommended Posts

Tenho o select abaixo, só que ele está trazendo duas linhas para o mesmo produto, ele traz uma linha para o d.tipo      = '0' e outra para o  d.tipo      = '1', preciso que na mesma linha mostre os 2.

 

Onde estou errando?

 

SELECT STRAIGHT_JOIN      DISTINCT TMP.*
FROM        (
                SELECT      DISTINCT d.cat_id   AS prod
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(d.qtd)          AS qtd_prod
                        ,   SUM(d.valor_total)  AS total_prod
                        ,   SUM(0)              AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '0'
                        AND c.dtConcat  BETWEEN '2018-05-01' AND '2018-08-05'
                        AND c.exportado = 'Sim'
                GROUP BY    prod
                UNION all
                SELECT STRAIGHT_JOIN     DISTINCT d.cat_id   AS prod
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(0)              AS qtd_prod
                        ,   SUM(0)              AS total_prod
                        ,   SUM(d.qtd)          AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '1'
                        AND c.dtConcat  < '2018-08-05'
                        AND c.exportado = 'Sim'
                GROUP BY    prod
            ) TMP
ORDER BY    TMP.qtd_prod DESC

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

da erro, poderia me dizer como usar por favor?

 

Fiz assim e da erro:

 

SELECT  DISTINCT TMP.*
FROM        (
                GROUP_CONCAT( SELECT DISTINCT d.cat_id   AS prod)
                ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(d.qtd)          AS qtd_prod
                        ,   SUM(d.valor_total)  AS total_prod
                        ,   SUM(0)              AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '0'
                        AND c.dtConcat  BETWEEN '2018-05-01' AND '2018-08-05'
                        AND c.exportado = 'Sim'
                group by prod, id_prod
                UNION
               GROUP_CONCAT( SELECT DISTINCT d.cat_id   AS prod)
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(0)              AS qtd_prod
                        ,   SUM(0)              AS total_prod
                        ,   SUM(d.qtd)          AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '1'
                        AND c.dtConcat  < '2018-08-05'
                        AND c.exportado = 'Sim'
                group by prod, id_prod
            ) TMP 
ORDER BY    TMP.qtd_prod DESC

e desse outro modo ele continua com os resultados duplicados.

 

SELECT  DISTINCT TMP.*
FROM        (
                SELECT GROUP_CONCAT( DISTINCT d.cat_id)
                ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(d.qtd)          AS qtd_prod
                        ,   SUM(d.valor_total)  AS total_prod
                        ,   SUM(0)              AS qtd_estoque
     
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '0'
                        AND c.dtConcat  BETWEEN '2018-05-01' AND '2018-08-05'
                        AND c.exportado = 'Sim'
                group by d.cat_id
                UNION
               SELECT GROUP_CONCAT( DISTINCT d.cat_id)
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   SUM(0)              AS qtd_prod
                        ,   SUM(0)              AS total_prod
                        ,   SUM(d.qtd)          AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '1'
                        AND c.dtConcat  < '2018-08-05'
                        AND c.exportado = 'Sim'
                group by d.cat_id
            ) TMP 
ORDER BY    TMP.qtd_prod DESC

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser isto 

 

SELECT STRAIGHT_JOIN   prod,id_prod,ID,qtd_prod,total_prod,qtd_estoque,
                       GROUP_CONCAT(DISTINCT TIPO
                      ORDER BY TIPO DESC SEPARATOR ' ') TIPOS
FROM        (
                SELECT      DISTINCT d.cat_id   AS prod
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   d.tipo              AS TIPO
                        ,   SUM(d.qtd)          AS qtd_prod
                        ,   SUM(d.valor_total)  AS total_prod
                        ,   SUM(0)              AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '0'
                        AND c.dtConcat  BETWEEN '2018-05-01' AND '2018-08-05'
                        AND c.exportado = 'Sim'
                GROUP BY    prod
                UNION all
                SELECT STRAIGHT_JOIN     DISTINCT d.cat_id   AS prod
                        ,   p.id
                        ,   p.nome              AS id_prod
                        ,   d.tipo              AS TIPO
                        ,   SUM(0)              AS qtd_prod
                        ,   SUM(0)              AS total_prod
                        ,   SUM(d.qtd)          AS qtd_estoque
                FROM        lc_controle c
                INNER JOIN  lc_detalhe  d ON d.controle_id  = c.id
                INNER JOIN  lc_cat      p ON p.id           = d.cat_id
                WHERE       d.tipo      = '1'
                        AND c.dtConcat  < '2018-08-05'
                        AND c.exportado = 'Sim'
                GROUP BY    prod
            ) TMP
ORDER BY    TMP.qtd_prod DESC

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo , sem a base fica difícil.

 

Mas a síntaxe do group e colocá-lo numa linha

 

Como as " quantidades incorretas" eradas vieram ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele retornou apenas 1 produto e a qtd veio apenas do tipo 0, como poderia te passar as bases?

 

prod id_prod ID qtd_prod total_prod qtd_estoque TIPOS  
24 HJ-111B FILTRO INTERNO 200LH 127V   24 87 1709.40 0 1 0
 
 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema são os totalizadores , else ficam incompatíveis 9em tese) com o agrupamento em linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por DoVaK
      Boa tarde,
       
      Estamos desenvolvendo um software wms (controle de estoque) que inicialmente funcionará na nuvem.
      Por ser um sistema complexo e com enorme quantidade de dados, estamos pensando em criar um banco de dados separado para cada empresa (cliente).
      Teriamos um banco de dados nosso onde estariam centralizadas algumas informações importantes, tais como as informações de cada empresa, dados para pagamento e os códigos que referenciariam o banco de dados especifico de cada cliente nosso (para fazer o redirecionamento correto no login).
      Seguem as dúvidas:
       
       - Esta seria uma boa forma de modelagem? 
       - Seria interessante ter o cadastro de todos os usuários no nosso banco de dados central ou deixar a tabela de usuários no banco de cada empresa?
       
      OBS: o SGBD é o MySQL.
       
      Obrigado pela ajuda.
       
      Jonathan.
    • Por JeysonRomualdo
      <?php //conexão com banco de dados.   $pdo = new PDO("mysql:dbname=cadastro", "root", "");   ?>   <html> <head> <title>Autenticando Usuario</title> <script type="text/javascript"> function loginsussesfully() { setTimeout("window.location='painel.php'", 5000); } function loginfailed(){ setTimeout("window.location='login.php'", 5000); } </script> </head> <body>   <?php //capturando informaçoes digitadas pelo usuario $email = $_POST['email']; $senha = $_POST['senha']; $sql = "SELECT * FROM usuarios WHERE email = '$email' and senha = '$senha'"; $row = mysql_num_rows($sql); if ($row > 0) { session_start(); $SESSION['email'] = $_POST['email']; $SESSION['senha'] = $_POST['senha']; echo "<center>Você foi autenticado com susseco!</center>"; echo "<script>loginsuccesfully</script>"; } else{ echo "<center>Nome de usuario ou senha invalidos!</center>"; echo "<script>loginfailed</script>"; } ?>   </body>   </html> erro na linha 25... nao consigo identificar o que pode estar errado ou faltando
    • Por Fabricio N. B
      Estou fazendo um projeto da escola que é um sistema para informatizar uma locadora de filmes, porém preciso listar os filmes mais alugados no mês e não estou sabendo fazer essa parte.
       
      Abaixo segue minhas tabelas mysql:
       
      create table clientes (
      id BIGINT NOT NULL AUTO_INCREMENT,
      nome VARCHAR(255),
      email VARCHAR(255),
      rg VARCHAR(255),
      endereco VARCHAR(255),
      dataNascimento DATE,
      primary key (id)
      );
       
       
      create table filmes (
      id BIGINT NOT NULL AUTO_INCREMENT,
      titulo VARCHAR(255),
      genero VARCHAR(255),
      anoLancamento int,
      primary key (id)
      );
       
       
      create table alugueis (
      id BIGINT NOT NULL AUTO_INCREMENT,
      cliente bigint,
      filme bigint,
      dataAluguel DATE,
      dataDevolucao DATE,
      primary key (id),
      foreign key (cliente) references clientes(id),
      foreign key (filme) references filmes(id)
      );
       
       
      Desde já agradeço.
    • Por M. Alberto
      O que preciso alterar para acessar meu banco de dados remotamente?
       
      Tenho o IP e outros dados... como faço com este código?
       
      <?php $link = mysql_connect('localhost', 'USUARIO_NOME', 'SENHA_ACESSO'); if (!$link) { die('Não conseguiu conectar: ' . mysql_error()); } $db_selected = mysql_select_db('BANCODEDADOS_NOME', $link); if (!$db_selected) { die ('Não pode selecionar o banco : ' . mysql_error()); } $rst_pedidos=mysql_query("SELECT * FROM pedidosgarotao WHERE impresso='nao' ORDER BY id",$link); $num_pedidos=mysql_num_rows($rst_pedidos); if ($num_pedidos==0) { ?>  
    • Por M. Alberto
      Estou realizando a migração de meu site que utiliza um banco de dados em mySQL PHP porém estou obtendo erro.
       
      Criei o banco de dados e fiz upload dos arquivos, porém agora neste servidor não roda de maneira alguma. Alguém poderia me ajudar ?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.