Fórum Firebird retornar dados em uma unica coluna #502777

28/11/2014

0

B. dia pessoal tenho a seguintes tabelas
/* Table: ESTOQUEPROD, Owner: SYSDBA */
CREATE TABLE "ESTOQUEPROD" 
(
  "CODIGO"	 INTEGER NOT NULL,
  "CODFORNPENULT"	 INTEGER,
  "CODFORNENTRADA"	 INTEGER,
  "ID_LOJA"	 INTEGER NOT NULL,
  "QUANTIDADE"	 DOUBLE PRECISION NOT NULL,
  "QUANTIDADEDEP"	 DOUBLE PRECISION NOT NULL,
  "QUANTPENULT"	 DOUBLE PRECISION,
  "VALOR"	 DOUBLE PRECISION,
  "VALORPENULT"	 DOUBLE PRECISION,
  "ULTIMAVENDA"	 TIMESTAMP,
  "ULTIMAENTRADA"	 TIMESTAMP,
  "DATAPENULTENTRADA"	 TIMESTAMP,
  "ALTERACAO"	 TIMESTAMP,
  "QUANTENTRADA"	 DOUBLE PRECISION,
  "QTGRADE"	 VARCHAR(250),
  "E_PRECO_COMPRA"	 DOUBLE PRECISION,
  "E_PRECO_VENDA"	 DOUBLE PRECISION,
  "E_MARGEM"	 NUMERIC(15,2),
  "E_ESTMINIMO"	 INTEGER,
  "E_ESTMAXIMO"	 INTEGER,
CONSTRAINT "PK_ESTOQUEPROD" PRIMARY KEY ("CODIGO", "ID_LOJA")
);

CREATE TABLE "PRODUTOS" 
(
  "CODIGO"	 INTEGER NOT NULL,
  "CODSETOR"	 INTEGER,
  "CODFORN"	 INTEGER,
  "CODLAB"	 INTEGER,
  "CODIGO_BARRAS"	 VARCHAR(14),
  "PRODUTO"	 VARCHAR(50) NOT NULL,
  "ICMS"	 VARCHAR(6),
  "PRECO_COMPRA"	 DOUBLE PRECISION,
  "PRECO_VENDA"	 DOUBLE PRECISION,
  "MAXIMO"	 DOUBLE PRECISION,
  "MINIMO"	 DOUBLE PRECISION,
  "UNIDADE"	 VARCHAR(4),
  "ESPECIFICACAO"	 VARCHAR(45),
  "IMAGEM"	 BLOB SUB_TYPE 0 SEGMENT SIZE 80,


a tabela produtos carregar o cadastro do produto a tabela estoque
carrega os estoques por loja, gostaria retornar os dados em colunas.

Ex:

Produto Loja 1 Loja2
teste de loja 2 3
Obrigado a todos que poderem dar uma força.
Emerson Santos

Emerson Santos

Responder

Post mais votado

30/11/2014

É q vc copiou uma parte q não pertence ao subselect, ele acaba no primeiro GROUP BY...

 SELECT p.produto,
           CASE
           WHEN v.id_loja = 1 THEN
             SUM(v.total)
           END as loja_1,
           CASE
           WHEN v.id_loja = 2 THEN
             SUM(v.total)
           END as loja_2
    FROM vendas v
    LEFT OUTER JOIN produtos p  ON (v.codigo = p.codigo)
    WHERE v.id_loja in (1,2)
    GROUP BY p.produto,v.id_loja

Marisiana Battistella

Marisiana Battistella
Responder

Gostei + 1

Mais Posts

28/11/2014

Ronaldo Lanhellas

Você pode tentar o GROUP BY, para agrupar todos os produtos por loja. Estude um pouco sobre: http://www.firebirdsql.org/manual/nullguide-aggrfunc.html
Responder

Gostei + 0

28/11/2014

Ronaldo Lanhellas

Você pode tentar o GROUP BY, para agrupar todos os produtos por loja. Estude um pouco sobre: http://www.firebirdsql.org/manual/nullguide-aggrfunc.html
Responder

Gostei + 0

28/11/2014

Ronaldo Lanhellas

Você pode tentar o GROUP BY, para agrupar todos os produtos por loja. Estude um pouco sobre: http://www.firebirdsql.org/manual/nullguide-aggrfunc.html
Responder

Gostei + 0

28/11/2014

Ronaldo Lanhellas

Você pode tentar o GROUP BY, para agrupar todos os produtos por loja. Estude um pouco sobre: http://www.firebirdsql.org/manual/nullguide-aggrfunc.html
Responder

Gostei + 0

28/11/2014

Emerson Santos

SELECT
P.CODIGO,
P.PRODUTO,
E.QUANTIDADE
FROM PRODUTOS P
LEFT OUTER JOIN ESTOQUEPROD E ON E.CODIGO =P.CODIGO
WHERE P.CODIGO=46463
GROUP BY P.CODIGO,P.PRODUTO,E.QUANTIDADE

mesmo utilizando o seguinte codigo , ele mostra o mesmo registro varias vezes
de acordo com a quantidade de lojas que tem estoque na tabela estoqueprod
eu queri agrupalos
produto quantidade1 quantidade2 quantidade3
caixa 2 3 5
Responder

Gostei + 0

29/11/2014

Marisiana Battistella

No teu caso eu acho que vc vai ter que utilizar o CASE ou algum outro recurso que transforme linhas em colunas.
No Oracle pode-se fazer isso utilizando o PIVOT, mas eu acho q não tem esse recurso no firebird...
Responder

Gostei + 0

29/11/2014

Randrade

SELECT
P.CODIGO,
P.PRODUTO,
E.QUANTIDADE
FROM PRODUTOS P
LEFT OUTER JOIN ESTOQUEPROD E ON E.CODIGO =P.CODIGO
WHERE P.CODIGO=46463
GROUP BY P.CODIGO,P.PRODUTO,E.QUANTIDADE

mesmo utilizando o seguinte codigo , ele mostra o mesmo registro varias vezes
de acordo com a quantidade de lojas que tem estoque na tabela estoqueprod
eu queri agrupalos
produto quantidade1 quantidade2 quantidade3
caixa 2 3 5


Não entendi muito bem sua dúvida. Mas se está retornando o mesmo dado várias vezes, já tentou usar o "DISTINCT". Basta adicionar a palavra "DISTINCT" após o SELECT.

Se não for isso, peço que explique melhor seu problema para que possa ajudar melhor.
Responder

Gostei + 0

29/11/2014

Marisiana Battistella

Randrade, pelo que entendi, ele precisa listar

PRODUTO     LOJA_1    LOJA_2   LOJA_3
prod1         1                3               4
prod2         2                1               2
prod3         2                4                4        
Responder

Gostei + 0

29/11/2014

Emerson Santos

Isso mesmo Marisiana que preciso , sim o oracle e mysql tem esse recurso pivot
ate o mesmo o access, no firebird nao tem , so tem um recurso chamado LIST
mais ainda sim nao é o que preciso, pensei em alguem que tivesse conhecimento em
store procedure ja vi isso utilizando esse recurso.
Responder

Gostei + 0

29/11/2014

Marisiana Battistella

Consegui fazer assim:
SELECT res.nmproduto,
       SUM(res.loja_1) as loja_1,
       SUM(res.loja_2) as loja_2
FROM (
	SELECT p.nmproduto,
	       CASE 
		   WHEN v.idloja = 1 THEN
		     SUM(v.vlrtotal)
	       END as loja_1,
	       CASE 
		   WHEN v.idloja = 2 THEN
		     SUM(v.totalitem) 
	       END as loja_2
	FROM venda v
	JOIN produto p
	ON v.idproduto = p.idproduto
	WHERE v.idloja in (1,2)
	GROUP BY p.nmproduto,
		 v.idloja) res
GROUP BY res.nmproduto
ORDER BY res.nmproduto
Responder

Gostei + 0

29/11/2014

Marisiana Battistella

Assim eu consegui fazer listar da forma que você precisa e na base que testei a performance ficou boa, isso que é uma base que contém muitos dados...
Basta saber se pode ser aplicado...
Responder

Gostei + 0

29/11/2014

Emerson Santos

Legal Marisiana, bom demais vou testar aqui,
sql comum ou voce colocou em uma store procedures ?
Responder

Gostei + 0

29/11/2014

Emerson Santos

Adequei de acordo com meu banco
mais da esse erro

ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 5, column 5
SELECT

SELECT res.produto,
       SUM(res.loja_1) as loja_1,
       SUM(res.loja_2) as loja_2
FROM (
    SELECT p.produto,
           CASE
           WHEN v.id_loja = 1 THEN
             SUM(v.total)
           END as loja_1,
           CASE
           WHEN v.id_loja = 2 THEN
             SUM(v.total)
           END as loja_2
    FROM vendas v
    JOIN produtos p  ON v.codigo = p.codigo
    WHERE v.id_loja in (1,2)
    GROUP BY p.produto,v.id_loja) res
GROUP BY res.produto
ORDER BY res.produto
Responder

Gostei + 0

29/11/2014

Marisiana Battistella

Eu fiz um SELECT normal, direto no banco de dados...
Executa só o select do subselect para ver se dá o mesmo erro?
Responder

Gostei + 0

29/11/2014

Emerson Santos

executando o subselect
da esse erro
ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 13, column 33
)

SELECT p.produto,
           CASE
           WHEN v.id_loja = 1 THEN
             SUM(v.total)
           END as loja_1,
           CASE
           WHEN v.id_loja = 2 THEN
             SUM(v.total)
           END as loja_2
    FROM vendas v
    JOIN produtos p  ON v.codigo = p.codigo
    WHERE v.id_loja in (1,2)
    GROUP BY p.produto,v.id_loja) res
GROUP BY res.produto
ORDER BY res.produto
Responder

Gostei + 0

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

Aceitar