Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rods2018

Retornar produtos que forem iguais usando um select na condição

Recommended Posts

Olá meus caros queria retornar os produtos que forem iguais a de um select mas ao fazer isso ele retorna vazio

 

a query...

 

select 
top 10 
    names.A1_COD,
    names.A1_NOME,
    names.A1_VEND,
    produtos.ULTCOMP_CLIENTE,
    produtos.B1_COD,
    produtos.B1_DESC,
    produtos.B2_QATU,
    produtos.B2_CM1,
    produtos.B2_VFIM1,
    produtos.B2_VATU1,
    teste.D2_QUANT,
    teste.D2_PRCVEN,
    produtos.ULTCOMP_PRODUTO 
from
    (select 
    distinct 
        D2_COD,
        D2_CLIENTE,
        D2_QUANT,
        D2_EMISSAO,
        D2_PRCVEN from SD2010 
    group by 
        D2_COD,
        D2_CLIENTE,
        D2_QUANT,
        D2_EMISSAO,
        D2_PRCVEN) as teste,
        (select 
            A1_COD,
            A1_NOME,
            A1_VEND from SA1010 
        group by 
            A1_COD,
            A1_NOME,
            A1_VEND) as names,
            (select 
                A1_COD,
                A1_ULTCOM as ULTCOMP_CLIENTE,
                B1_COD,
                B1_DESC,
                B2_QATU,
                B2_CM1,
                B2_VFIM1,
                B2_VATU1,
                max(D2_EMISSAO) as ULTCOMP_PRODUTO from SB1010 SB1 
                    inner join SD2010 SD2 on D2_COD = B1_COD 
                    inner join SB2010 SB2 on B2_COD = B1_COD 
                    inner join SA1010 SA1 on A1_COD = D2_CLIENTE 
                where 
                    B2_QATU > 0 
                and 
                    (D2_EMISSAO 
                between 
                    dateadd(mm,-8,getdate()) and dateadd(mm,-2,getdate()) 
                and 
                    SA1.D_E_L_E_T_ <> '*' 
                and 
                    (SB1.D_E_L_E_T_ <> '*' 
                and 
                    SB2.D_E_L_E_T_ <> '*' 
                and 
                    (SD2.D_E_L_E_T_ <> '*' 
                and 
                    B1_TIPO = 'ME' 
                and 
                    (B1_COD not in(
                    select distinct D2_COD from SD2010 
                    where 
                        D2_FILIAL = 01 
                    and 
                        (D2_EMISSAO between dateadd(mm,-2,getdate()) and  getdate() 
                    and 
                        D2_TIPO = 'N'))))))
            group by 
                A1_COD,
                A1_ULTCOM,
                B1_COD,
                B1_DESC,
                B2_QATU,
                B2_CM1,
                B2_VFIM1,
                B2_VATU1) as produtos 
where 
    names.A1_COD = produtos.A1_COD 
and 
    teste.D2_COD = produtos.B1_COD 
and( 
    teste.D2_CLIENTE = produtos.A1_COD 
and 
    teste.D2_EMISSAO = produtos.ULTCOMP_PRODUTO)
order by 
    produtos.ULTCOMP_PRODUTO desc;

 

No where queria colocar um select que retorna apenas um B1_COD ae ele compara se é igual ao do select principal, assim retornando somente este produto.

 

Resultado:

image.thumb.png.f8b1f3926dc7e49f4929ca276a1cd67a.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 06/03/2018 at 11:06, A.Jr disse:

divide seu select em dois e usa o UNION

Olá A.jr nao conheço muito o union tentei faze-lo mas não consegui teria como mostrar algum exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Defina melhor

Citar

que forem iguais a de um select

 

todavia em geral um EXISTS ou IN resolve

Compartilhar este post


Link para o post
Compartilhar em outros sites

boaaaa eu consegui entendi o que estava fazendo de errado

 

ficou assim

 

cheguei a fazer com o union entendi o conceito dele pelo menos e como usar nas proximas vezes...

 

    

select names.A1_COD,names.A1_NOME,names.A1_VEND,produtos.ULTCOMP_CLIENTE,produtos.B1_COD,produtos.B1_DESC,produtos.B2_QATU,produtos.B2_CM1,produtos.B2_VFIM1,produtos.B2_VATU1,teste.D2_QUANT,teste.D2_PRCVEN,produtos.ULTCOMP_PRODUTO from
        (select distinct D2_COD,D2_CLIENTE,D2_QUANT,D2_EMISSAO,D2_PRCVEN from SD2010 group by D2_COD,D2_CLIENTE,D2_QUANT,D2_EMISSAO,D2_PRCVEN) as teste,
        (select A1_COD,A1_NOME,A1_VEND from SA1010 group by A1_COD,A1_NOME,A1_VEND) as names,
            (select A1_COD,A1_ULTCOM as ULTCOMP_CLIENTE,B1_COD,B1_DESC,B2_QATU,B2_CM1,B2_VFIM1,B2_VATU1,max(D2_EMISSAO) as ULTCOMP_PRODUTO from SB1010 SB1 
            inner join SD2010 SD2 on D2_COD = B1_COD 
            inner join SB2010 SB2 on B2_COD = B1_COD 
            inner join SA1010 SA1 on A1_COD = D2_CLIENTE 
            where B2_QATU > 0 and (D2_EMISSAO between dateadd(mm,-8,getdate()) and dateadd(mm,-2,getdate()) and SA1.D_E_L_E_T_ <> '*' and (SB1.D_E_L_E_T_ <> '*' and SB2.D_E_L_E_T_ <> '*' and (SD2.D_E_L_E_T_ <> '*' and B1_TIPO = 'ME' and (B1_COD not in(
                select distinct D2_COD from SD2010 
                where D2_FILIAL = 01 and (D2_EMISSAO between dateadd(mm,-2,getdate()) and  getdate() and D2_TIPO = 'N'))))))
            group by A1_COD,A1_ULTCOM,B1_COD,B1_DESC,B2_QATU,B2_CM1,B2_VFIM1,B2_VATU1) as produtos 
    where names.A1_COD = produtos.A1_COD and teste.D2_COD = produtos.B1_COD and teste.D2_CLIENTE = produtos.A1_COD and teste.D2_EMISSAO = produtos.ULTCOMP_PRODUTO and B1_COD in(select top 1 B1_COD from SB1010 SB1
        inner join SD2010 SD2 on D2_COD = B1_COD 
        inner join SB2010 SB2 on B2_COD = B1_COD 
        inner join SA1010 SA1 on A1_COD = D2_CLIENTE
    where B2_QATU > 0 and D2_EMISSAO between dateadd(mm,-8,getdate()) and dateadd(mm,-2,getdate()) and (SB1.D_E_L_E_T_ <> '*' and SA1.D_E_L_E_T_ <> '*' and (SB1.D_E_L_E_T_ <> '*' and SB2.D_E_L_E_T_ <> '*' and (SD2.D_E_L_E_T_ <> '*'and B1_TIPO = 'ME' and (B1_COD not in(
    select distinct D2_COD from SD2010 
    where D2_FILIAL = 01 and (D2_EMISSAO between dateadd(mm,-2,getdate()) and  getdate() and D2_TIPO = 'N')))))))

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por FabianoSouza
      Tenho uma function que precisa receber 02 argumentos.
      Ela funciona se eu aplicar num select qualquer. Mas se eu aplicar num select dinâmico, ocorre erro.
      Veja trecho do meu select.
      ... SET @sql = @sql +', dbo.retornaIco_ItemBloq((SELECT COUNT(*) FROM dbo.tab AS TT2 WHERE TT2.codCategTreina = CTT.id),'+@title+') AS ''resp''' ... No caso, o primeiro argumento da function dbo.retornaIco_ItemBloq é um SELECT COUNT.
      O segundo argumento é uma variável (que está devidamente declarada e definida).
       
      O erro ocorre porque ao executar (chamando EXEC(@sql) ), o SQL entende que o segundo argumento é uma coluna da consulta principal, pois existe uma vírgula antes da variável @title (que é o segundo argumento da function).
      Repito. Se eu aplicar essa function num select normal, funciona normalmente. Porém, preciso que funcione num SQL dinâmico porque é esse é o padrão que estou adotando para o sistema todo.
       
      A function dbo.retornaIco_ItemBloq faz o seguinte:
      1) Recebe o valor do COUNT e da variável @title
      2) Se o COUNT for maior que  Zero, cria uma tag HTML (uma SPAN), define sua title com o valor da variável @title e passa para uma variável
      3) Retorna o HTML que será exibido no resultado da consulta principal
      É super simples.
       
      Há outra forma de chamar a function?
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por Sapinn
      Olá a todos existe alguma maneira de trazer todos os dados de uma tabela menos o maior valor?
    • Por Wandersonwfs
      Bom dia Pessoal,
       
      Estou com um problema para finalizar uma consulta onde, quando executado a consulta  e não encontrado nenhuma informação no período solicitado, tenho que trazer pelo menos o nome da conta.
       
      Consulta,
       
      WITH TMPESTONO (
          NOME_IMPOSTO
          ,MES
          ,VALOR
          )
      AS (
          SELECT 'ESTORNO SOBRE GREEN VILLE' AS NOME_IMPOSTO
              ,'F_' + SZN.ZN_ITEM AS FILFOR
              ,SUM((SZN.ZN_PRV * SZN.ZN_PRCAPL) / 100) AS TOTAL
          FROM SZN010 SZN
          WHERE SZN.D_E_L_E_T_ = ' '
              AND SZN.ZN_ITEM IN (
                  '01'
                  ,'16'
                  ,'30'
                  ,'40'
                  ,'46'
                  ,'51'
                  ,'52'
                  ,'60'
                  ,'70'
                  ,'72'
                  ,'73'
                  ,'80'
                  )
              AND SZN.ZN_DATA BETWEEN '20220701'
                  AND '20220731'
              AND SZN.ZN_DESC = ('GRENVILLE')
          GROUP BY SZN.ZN_DESC
              ,SZN.ZN_ITEM
          )
      SELECT *
      FROM (
          SELECT NOME_IMPOSTO
              ,MES
              ,VALOR
          FROM TMPESTONO
          ) AS PivotData
      PIVOT(SUM(VALOR) FOR MES IN (
                  [F_16]
                  ,[F_30]
                  ,[F_40]
                  ,[F_46]
                  ,[F_51]
                  ,[F_52]
                  ,[F_60]
                  ,[F_70]
                  ,[F_72]
                  ,[F_73]
                  ,[TOTAL]
                  )) AS PivotTable2
      ORDER BY 1
       
×

Informação importante

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