Fórum Consulta de produtos #623772

01/07/2025

0

Bom dia, estou com o seguinte comando:
WITH PRECO_ORDENADO AS (
    SELECT
        I.CODTABPRECO,
        I.CODPROD,
        I.VALOR,
		I.CUSTO,
		I.MARGEM,
        ROW_NUMBER() OVER (
            PARTITION BY I.CODTABPRECO, I.CODPROD
            ORDER BY
                COALESCE(I.DATAHORAALT, I.DATAHORACAD) DESC
        ) AS ORDEM
    FROM ITEMTABPRECO I
)
SELECT
    CODTABPRECO,
    CODPROD,
    VALOR,
	CUSTO,
	MARGEM
FROM PRECO_ORDENADO

WHERE ORDEM = 1;


Como faço para listar tambem a descrição do produto que está na tabela PRODUTO (chave primaria é o codprod), e a descrição do grupo que está na tabela GRUPO (chave primaria é o codgrupo, que está ligada com a tabela de produto)?
Mylena

Mylena

Responder

Posts

01/07/2025

Claudio Andrade

Bom dia, estou com o seguinte comando:
WITH PRECO_ORDENADO AS (
    SELECT
        I.CODTABPRECO,
        I.CODPROD,
        I.VALOR,
		I.CUSTO,
		I.MARGEM,
        ROW_NUMBER() OVER (
            PARTITION BY I.CODTABPRECO, I.CODPROD
            ORDER BY
                COALESCE(I.DATAHORAALT, I.DATAHORACAD) DESC
        ) AS ORDEM
    FROM ITEMTABPRECO I
)
SELECT
    CODTABPRECO,
    CODPROD,
    VALOR,
	CUSTO,
	MARGEM
FROM PRECO_ORDENADO

WHERE ORDEM = 1;


Como faço para listar tambem a descrição do produto que está na tabela PRODUTO (chave primaria é o codprod), e a descrição do grupo que está na tabela GRUPO (chave primaria é o codgrupo, que está ligada com a tabela de produto)?




Ajuste o nome dos campos dentro do LEFT conforme sua necessidade.

WITH PRECO_ORDENADO AS (
    SELECT
        I.CODTABPRECO,
        I.CODPROD,
        I.VALOR,
        I.CUSTO,
        I.MARGEM,
        ROW_NUMBER() OVER (
            PARTITION BY I.CODTABPRECO, I.CODPROD
            ORDER BY
                COALESCE(I.DATAHORAALT, I.DATAHORACAD) DESC
        ) AS ORDEM
    FROM ITEMTABPRECO I
)
SELECT
    CODTABPRECO,
    CODPROD,
    VALOR,
    CUSTO,
    MARGEM,
	prod.nome,
	prod.descricao
FROM PRECO_ORDENADO

left join (
	select
		p.codprod,
		p.nome,
		g.descricao
	from
		produto p
	inner join 
		grupo g on g.codgrupo = p.codgrupo
) prod on prod.CODPROD = CODPROD
 
WHERE ORDEM = 1;
Responder

Gostei + 0

02/07/2025

Arthur Heinrich

WITH PRECO_ORDENADO AS (
SELECT
  I.CODTABPRECO,
  I.CODPROD,
  P.NOMEPRODUTO PRODUTO,
  G.NOMEGRUPO GRUPO,
  I.VALOR,
  I.CUSTO,
  I.MARGEM,
  ROW_NUMBER() OVER (
    PARTITION BY I.CODTABPRECO, I.CODPROD
    ORDER BY COALESCE(I.DATAHORAALT, I.DATAHORACAD) DESC) AS ORDEM
  FROM ITEMTABPRECO I
    LEFT JOIN PRODUTO P
      ON P.CODPROD = I.CODPROD
    LEFT JOIN GRUPO G
      ON G.CODGRUPO = P.CODGRUPO )
SELECT
  CODTABPRECO,
  CODPROD,
  VALOR,
  CUSTO,
  MARGEM
FROM PRECO_ORDENADO
WHERE
  ORDEM = 1
ORDER BY 1, 2;

Responder

Gostei + 0

03/07/2025

Mylena

Está apresentando erro nessa parte:

 
left join (
    select
        p.codprod,
        p.PRDDESCRICAO,
        g.descricao
    from produto p
    inner join GRUPPROD g on g.CODGRUP=p.CODGRUP
) prod on prod.CODPROD = CODPROD
  
WHERE ORDEM = 1;


Erro: Nome da coluna 'CODPROD' ambíguo.
Responder

Gostei + 0

04/07/2025

Claudio Andrade

Está apresentando erro nessa parte:

 
left join (
    select
        p.codprod,
        p.PRDDESCRICAO,
        g.descricao
    from produto p
    inner join GRUPPROD g on g.CODGRUP=p.CODGRUP
) prod on prod.CODPROD = CODPROD
  
WHERE ORDEM = 1;


Erro: Nome da coluna 'CODPROD' ambíguo.


Pegue o select interno e filtre somente ele com alguns registros de CODPROD da consulta principal, veja se o resultado retorna mais de um com o mesmo código.
Talvez você precise fazer algum ajuste fino para obter o resultado desejado, visto que não conheço seu ambiente.

De qualquer forma poste aqui o resultado para que possamos ir ajudando se necessário.

Boa sorte.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar