Usuário com melhor resposta
Como montar essa Query?

Pergunta
-
preciso retornar um UNICO preço dependendo do tipo do cliente.
São 3 tipos de clientes: CLIENTE, DISTRIBUIDOR, ATACADO
este cliente pode ou não estar vinculado a uma tabela de preços. Se estiver vinculado a uma tabela de preços é feito a consulta e retorna o preço adequado ao cliente: PrecoVenda, PrecoAtacado, PrecoDistribuidor.
Se o cliente não possui tabela de preços, então consulta na tabela de produtos que contem os mesmos campos de preçoes acima.
Colocarei somente os campos que interessa.
Tabelas:
TABELAPRODUTO(TABELA NVARCHAR(5),
CodProd NCHAR(13),
PrecoVenda MONEY,
PrecoAtacado MONEY,
PrecoDistribuidor MONEY)
PRODUTOS(CODPROD NCHAR(13),
PrecoVenda MONEY,
PrecoAtacado MONEY,
PrecoDistribuidor MONEY,
CODTABELA NVARCHAR(5))
CLIENTES(CODCLI,
RAZAOSOCIAL NVARCHAR(40),
TIPO NVARCHAR(20),
CODTABELA NVARCHAR(5))segunda-feira, 21 de setembro de 2009 16:36
Respostas
-
JrCesar,
Você pode montar o seu select desta forma:
select tabela, tipo, case when tabela is null then ( select case cliente.TIPO when 'ATACADO' then PRECOATACADO when 'CLIENTE' then PRECOVENDA when 'DISTRIBUIDOR' then PRECODISTRIBUIDOR else null end as preco from produtos where CODPROD = @CODPROD ) when tabela is not null then ( select case cliente.TIPO when 'ATACADO' then PRECOATACADO when 'CLIENTE' then PRECOVENDA when 'DISTRIBUIDOR' then PRECODISTRIBUIDOR else null end as preco from TABELAPRODUTO WHERE CODPROD = @CODPROD AND TABELAPRODUTO.TABELA = CLIENTE.TABELA) FROM CLIENTES WHERE CODCLI = @CODCLI
Carlos Eduardo Pieren - MCP- Sugerido como Resposta Carlos Eduardo Pieren terça-feira, 22 de setembro de 2009 18:24
- Marcado como Resposta JrCesar quarta-feira, 23 de setembro de 2009 16:05
terça-feira, 22 de setembro de 2009 18:24
Todas as Respostas
-
Boa tarde
Até mesmo pela questao de manter a integridade referencial das tabelas do seu banco de dados, a melhor solução seria você associar o seu cliente a uma tabela DEFAULT, a partir daí basta você fazer um JOIN
Select Produtos.PrecoVenda,Produtos.PrecoAtacado,Produtos.PrecoDistribuidor
From TabelaProduto
Inner Join Clientes On Clientes.CodTabela = Produtos.CodTabela
Inner Join Produtos.Produtos.CodTabela = Produtos.CodTabela
Espero ter ajudado
Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpasegunda-feira, 21 de setembro de 2009 16:52 -
olá anderson, tudo bem?
na verdade a ideia é mais ou menos essa:DECLARE @PRECO MONEY
SELECT TABELA, TIPO FROM CLIENTES WHERE CODCLI = @CODCLI
IF ISNULL(TABELA) THEN
CASE TIPO='ATACADO'
@PRECO = SELECT PRECOATACADO FROM PRODUTOS WHERE CODPROD = @CODPROD
CASE TIPO='CLIENTE'
@PRECO = SELECT PRECOVENDA FROM PRODUTOS WHERE CODPROD = @CODPROD
CASE TIPO='DISTRIBUIDOR'
@PRECO = SELECT PRECODISTRIBUIDOR FROM PRODUTOS WHERE CODPROD = @CODPROD
ELSE
CASE TIPO='ATACADO'
@PRECO = SELECT PRECOATACADO FROM TABELAPRODUTO WHERE CODPROD = @CODPROD AND TABELAPRODUTO.TABELA = CLIENTE.TABELA
CASE TIPO='CLIENTE'
@PRECO = SELECT PRECOVENDA FROM TABELAPRODUTO WHERE CODPROD = @CODPROD AND TABELAPRODUTO.TABELA = CLIENTE.TABELA
CASE TIPO='DISTRIBUIDOR'
@PRECO = SELECT PRECODISTRIBUIDOR FROM TABELAPRODUTO WHERE CODPROD = @CODPROD AND TABELAPRODUTO.TABELA = CLIENTE.TABELA
END
Eu sei que a sintaxe esta completamente errada, mas é mais ou menos essa a ideia. Se voce puder me ajudar na sintaxe ficaria muito grato.segunda-feira, 21 de setembro de 2009 20:22 -
JrCesar,
Você pode montar o seu select desta forma:
select tabela, tipo, case when tabela is null then ( select case cliente.TIPO when 'ATACADO' then PRECOATACADO when 'CLIENTE' then PRECOVENDA when 'DISTRIBUIDOR' then PRECODISTRIBUIDOR else null end as preco from produtos where CODPROD = @CODPROD ) when tabela is not null then ( select case cliente.TIPO when 'ATACADO' then PRECOATACADO when 'CLIENTE' then PRECOVENDA when 'DISTRIBUIDOR' then PRECODISTRIBUIDOR else null end as preco from TABELAPRODUTO WHERE CODPROD = @CODPROD AND TABELAPRODUTO.TABELA = CLIENTE.TABELA) FROM CLIENTES WHERE CODCLI = @CODCLI
Carlos Eduardo Pieren - MCP- Sugerido como Resposta Carlos Eduardo Pieren terça-feira, 22 de setembro de 2009 18:24
- Marcado como Resposta JrCesar quarta-feira, 23 de setembro de 2009 16:05
terça-feira, 22 de setembro de 2009 18:24