SQL Complexo ?
Olá Pessoal, bom dia !
tenho a seguinte situação:
tenho uma tabela:
TABELA_PRECO
ID
DESCRICAO
ID_PRODUTO
VALOR
nesta tabela o mesmo produto pode ter dois registros com preços diferentes, a pegunta e a seguinte, como fazer um select para mostrar um só registro com os preços do produto ?
[]´s
tenho a seguinte situação:
tenho uma tabela:
TABELA_PRECO
ID
DESCRICAO
ID_PRODUTO
VALOR
nesta tabela o mesmo produto pode ter dois registros com preços diferentes, a pegunta e a seguinte, como fazer um select para mostrar um só registro com os preços do produto ?
[]´s
Renatacoimbra
Curtidas 0
Respostas
Facc
05/04/2007
Bom dia
Uma sugestão que eu te dou é trabalhar com tabela de preço, eu trabalho assim aqui.
e qndo preciso pego pelo código do produto os preços dessa tabela de preço
Uma sugestão que eu te dou é trabalhar com tabela de preço, eu trabalho assim aqui.
e qndo preciso pego pelo código do produto os preços dessa tabela de preço
GOSTEI 0
Martins
05/04/2007
Não sei se entendi direito, mas vc tá querendo algo assim.
[list:9546849fe8]ID DESCRICAO ID_PORDUTO VALOR
1 ÓLEO XXXX 01154 1,20
4 ÓLEO XXXX 02541 1,30 [/list:u:9546849fe8]
vc quer listar Óleo, mas quer uma coluna q mostre preço1 e preço2, mais ou menos isso?
[list:9546849fe8]ID DESCRICAO ID_PORDUTO VALOR
1 ÓLEO XXXX 01154 1,20
4 ÓLEO XXXX 02541 1,30 [/list:u:9546849fe8]
vc quer listar Óleo, mas quer uma coluna q mostre preço1 e preço2, mais ou menos isso?
GOSTEI 0
Pestana_
05/04/2007
como fazer um select para mostrar um só registro com os preços do produto ?
não sei se consegui entender, mas vou postar o que entendi.
acho que não tem como fazer o que você quer uzando somente um select, porque cada preço do produto em um registro é diferente do outro registro então por isso que sempre trás repetido a descrição do produto, com isso não dá pra colocar todos os preços em um só registro, é isso o problema que está aconteçento?.
o que vc poderia fazer é utilizar o conceito de master-detalhe ai vc utiliza dois selects
select master teria a descrição produto e o select detalhe teria os preços do produto
não sei se fui bem claro, mas qualquer coisa eu posto de novo,
Pestana.
GOSTEI 0
Motta
05/04/2007
Acho que falta uma vigencia na tabela de precos assim vc buscaria pela vigencia, algo assim
A VIGENCIA (DATA_INICIO) DEVE ESTAR NA pk ASSIM SÓ TERIA UM PRECO POR VIGENCIA
SELECT * FROM PRECOS WHERE COD-PROD = ´XXX´ AND :DATA BETWEEN DATA_INICIO AND DATA_FIM
A VIGENCIA (DATA_INICIO) DEVE ESTAR NA pk ASSIM SÓ TERIA UM PRECO POR VIGENCIA
GOSTEI 0
Renatacoimbra
05/04/2007
Olá Pessoal, obrigada a todos pelas respostas.
Vou reformular minha dúvida, isso que estou fazendo é uma tabela de preços, o usuário tem a opção de gerar quantas tabelas de preços quiser, baseando-se nos preços principais dos produtos.
TABELA_PRECO
ID
DESCRICAO
ID_PRODUTO
DESC_PRODUTO
VALOR
[b:84d3216d69]Exemplo da Tabela:[/b:84d3216d69]
nesta situação eu preciso fazer uma Tabela impressa que mostre desta forma:
[b:84d3216d69]Exemplo da Listagem:[/b:84d3216d69]
Gostei da idéia que o [b:84d3216d69]Pestana_[/b:84d3216d69] colocou, se alguém tiver mas alguma solução favor postar.
Obrigada !
[]´s
Vou reformular minha dúvida, isso que estou fazendo é uma tabela de preços, o usuário tem a opção de gerar quantas tabelas de preços quiser, baseando-se nos preços principais dos produtos.
TABELA_PRECO
ID
DESCRICAO
ID_PRODUTO
DESC_PRODUTO
VALOR
[b:84d3216d69]Exemplo da Tabela:[/b:84d3216d69]
ID DESCRICAO ID_PRODUTO DESC_PRODUTO VALOR --------------------------------------------------------------------------- 01 TABELA A 000001 ÁCIDO BÓRICO 150,00 02 TABELA B 000001 ÁCIDO BÓRICO 200,00 03 TABELA C 000001 ÁCIDO BÓRICO 220,00
nesta situação eu preciso fazer uma Tabela impressa que mostre desta forma:
[b:84d3216d69]Exemplo da Listagem:[/b:84d3216d69]
ID_PRODUTO DESC_PRODUTO PRECO A PRECO B PRECO C ------------------------------------------------------------------------------ 000001 ÁCIDO BÓRICO 150,00 200,00 220,00 ... ...
Gostei da idéia que o [b:84d3216d69]Pestana_[/b:84d3216d69] colocou, se alguém tiver mas alguma solução favor postar.
Obrigada !
[]´s
GOSTEI 0
Robsonselzelin
05/04/2007
Pelo que entendi, o que vc quer fazer é transformar os registros em colunas, ou seja, passar o registro de id 1 para coluna preço 1, id 2 para preço 2, de cada produto, e assim por diante
Se vc estiver utilizando banco de dados MySQL, se não me engano, ele tem uma função de transposição, do resultSet do select, de linhas para colunas, senão, vc vai ter que fazer isso via programação delphi.
Espero que isso ajude.
Se vc estiver utilizando banco de dados MySQL, se não me engano, ele tem uma função de transposição, do resultSet do select, de linhas para colunas, senão, vc vai ter que fazer isso via programação delphi.
Espero que isso ajude.
GOSTEI 0
Catunda
05/04/2007
Renata... seu problema pode ser resolvido com uma StoredProcedure simples.
Obs:
1-Ajuste o tamanho do parametro DPROD que recebe a descrição do produto.
2-Substitua a palavra ´suatabela´ pelo nome da sua tabela.
3-Estou supondo que só existem 3 subtabelas ou preços pra cada produto.
CREATE PROCEDURE TABPRECO
RETURNS (
COD CHAR(3) CHARACTER SET NONE,
DPROD VARCHAR(10) CHARACTER SET NONE,
VR1 NUMERIC(15,2),
VR2 NUMERIC(15,2),
VR3 NUMERIC(15,2))
AS
DECLARE VARIABLE XZ INTEGER;
begin
for select id_produto,sum(valor) from suatabela group by id_produto
order by id_produto into :cod,:xz do
begin
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela a´) into :dprod,:vr1;
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela b´) into :dprod,:vr2;
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela c´) into :dprod,:vr3;
suspend;
end
end
Obs:
1-Ajuste o tamanho do parametro DPROD que recebe a descrição do produto.
2-Substitua a palavra ´suatabela´ pelo nome da sua tabela.
3-Estou supondo que só existem 3 subtabelas ou preços pra cada produto.
CREATE PROCEDURE TABPRECO
RETURNS (
COD CHAR(3) CHARACTER SET NONE,
DPROD VARCHAR(10) CHARACTER SET NONE,
VR1 NUMERIC(15,2),
VR2 NUMERIC(15,2),
VR3 NUMERIC(15,2))
AS
DECLARE VARIABLE XZ INTEGER;
begin
for select id_produto,sum(valor) from suatabela group by id_produto
order by id_produto into :cod,:xz do
begin
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela a´) into :dprod,:vr1;
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela b´) into :dprod,:vr2;
select desc_produto,valor from suatabela
where (id_produto=:cod and descricao=´tabela c´) into :dprod,:vr3;
suspend;
end
end
GOSTEI 0
Renatacoimbra
05/04/2007
[b:f33095a954]Catunda[/b:f33095a954], Obrigada pela sua dica !
mais o problema é que pode ter mais de 3 tabelas, teria q ser uma coisa dinamica, a opção de gerar tabelas de preços fica aberto para o usuário criar quantas desejar.
Obrigada !
[]´s
mais o problema é que pode ter mais de 3 tabelas, teria q ser uma coisa dinamica, a opção de gerar tabelas de preços fica aberto para o usuário criar quantas desejar.
Obrigada !
[]´s
GOSTEI 0
Renatacoimbra
05/04/2007
Pessoal, esquecir de colocar.
Uso FireBird 1.5
Também aceito sugestão de outras formas de criar tabela de preços, essa minha pode não ser a melhor meneira.
[]´s
Uso FireBird 1.5
Também aceito sugestão de outras formas de criar tabela de preços, essa minha pode não ser a melhor meneira.
[]´s
GOSTEI 0
Catunda
05/04/2007
O fato da qtde de colunas de preço diferentes para um mesmo produto ser indefinida torna essa metodologia de criação de tabela totalmente inviável. Melhor seria imprimir mesmo o codigo e descrição do produdo em uma linha e nas linhas abaixo listar os diferentes preços.
Eu particularmente não vejo uma razão plausivel para se criar tabelas dependentes dentro de uma outra tabela geral. Se fossem independentes eu entenderia.
Perceba que mesmo se coloca-se-mos um laço na procedure pra controlar o numero de preços diferentes essa linha acabaria não cabendo em uma folha de relatório dado o grande numero de colunas.
Ou vc limita a qtde de preços diferentes ou imprima uma tabela de preço normal para cada usuário.
Eu particularmente não vejo uma razão plausivel para se criar tabelas dependentes dentro de uma outra tabela geral. Se fossem independentes eu entenderia.
Perceba que mesmo se coloca-se-mos um laço na procedure pra controlar o numero de preços diferentes essa linha acabaria não cabendo em uma folha de relatório dado o grande numero de colunas.
Ou vc limita a qtde de preços diferentes ou imprima uma tabela de preço normal para cada usuário.
GOSTEI 0