GARANTIR DESCONTO

Fórum consulta sql complicadississima #49613

27/02/2005

0

Select FI.*, LJ.NOME_RAZAO AS NOME_LOJA, LJ.COD_FILIAL AS FILIAL, BC.DESCRICAO AS NOME_BANCO, CC.DESCRICAO AS NOME_CUSTO, PCC.NOME_CONTA AS NOME_CONTA_CREDITO, PCD.NOME_CONTA AS NOME_CONTA_DEBITO, PCC.CONTA_REDUZIDA AS CONTA_REDUZ_CREDITO, PCD.CONTA_REDUZIDA AS CONTA_REDUZ_DEBITO, PCC.CONTA AS CONTA_CREDITO, PCD.CONTA AS CONTA_DEBITO, CL.NOME_RAZAO AS NOME_CLIENTE, CL.CNPF_CNPJ AS CNPF_CNPJ_CLIENTE, OPF.DESCRICAO AS NOME_OPERACAO_FISCAL, OPF.CODIGO_OPERACAO_FISCAL AS CODIGO_OPERACAO_FISCAL
FROM FINANCEIRO FI Case When(FI.TIPO_LANCAMENTO = ´R´) THEN ´LEFT JOIN CLIENTE´ When(FI.TIPO_LANCAMENTO = ´P´) THEN ´LEFT JOIN FORNECEDOR´ CL ON FI.ID_CLIENTE = When(FI.TIPO_LANCAMENTO = ´R´) THEN ´CL.ID_CLIENTE´ When(FI.TIPO_LANCAMENTO = ´P´) THEN ´CL.ID_FORNECEDOR´ LEFT JOIN LOJA LJ ON FI.ID_LOJA = LJ.ID_LOJA LEFT JOIN BANCO BC ON FI.ID_PORTADOR = BC.ID_BANCO LEFT JOIN PLANO_DE_CONTAS PCC ON FI.ID_CONTA_CREDITO = PCC.ID_PLANO LEFT JOIN OPERACAO_FISCAL OPF ON FI.ID_OPERACAO_FISCAL = OPF.ID_OPERACAO_FISCAL LEFT JOIN CENTRO_DE_CUSTO CC ON FI.ID_CENTRO_DE_CUSTO = CC.ID_CENTRO_DE_CUSTO
LEFT JOIN PLANO_DE_CONTAS PCD ON FI.ID_CONTA_DEBITO = PCD.ID_PLANO


**** PRECISO FAZER UM LIVRO CAIXA E MINHA TABELA FINANCEIRA E UMA SO A UNICA COISA Q DIFERENCIA E A STRING P = PAGAR E R = RECEBER POREM UMA TEM Q LOCALIZAR O FORNECEDOR E OUTRA O CLIENTE E MOSTRAR EM UMA TABELA SO AI VEM O PROBLEMA ME FALARAM DO CASE WHEN MAS ACHO Q NAO TIVE SUCESSO POIS NAO CONSEGUI UTILIZAR A SQL ESTA ACIMA ACHE POR FAVOR O DEFEITO E ME RETORNE PRECISO D+ DESSA AJUDA AGRDECO BYE




O SITE JA RESOLVEU MUITA COISA PRA MIM E TENHO CERTEZA Q ESSA OS FERAZ DA I MATA A PAU


Eltontlms

Eltontlms

Responder

Posts

27/02/2005

Gandalf.nho

[b:030e809c63][color=red:030e809c63]Notificação de Infração às Regras de Conduta :[/color:030e809c63][/b:030e809c63]

Texto do tópico em maiúsculas

Para maiores esclarecimentos pode mandar-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].


Responder

Gostei + 0

27/02/2005

Adilsond

SELECT FI.*,
       LJ.NOME_RAZAO AS NOME_LOJA,
       LJ.COD_FILIAL AS FILIAL,
       BC.DESCRICAO AS NOME_BANCO,
       CC.DESCRICAO AS NOME_CUSTO,
       PCC.NOME_CONTA AS NOME_CONTA_CREDITO,
       PCD.NOME_CONTA AS NOME_CONTA_DEBITO,
       PCC.CONTA_REDUZIDA AS CONTA_REDUZ_CREDITO,
       PCD.CONTA_REDUZIDA AS CONTA_REDUZ_DEBITO,
       PCC.CONTA AS CONTA_CREDITO,
       PCD.CONTA AS CONTA_DEBITO,
       CL.NOME_RAZAO AS NOME_CLIENTE,
       CL.CNPF_CNPJ AS CNPF_CNPJ_CLIENTE,
       OPF.DESCRICAO AS NOME_OPERACAO_FISCAL,
       OPF.CODIGO_OPERACAO_FISCAL AS CODIGO_OPERACAO_FISCAL
FROM FINANCEIRO FI
  LEFT JOIN CLIENTE CL
    ON FI.ID_CLIENTE = CL.ID_CLIENTE
  LEFT JOIN LOJA LJ
    ON FI.ID_LOJA = LJ.ID_LOJA
  LEFT JOIN BANCO BC
    ON FI.ID_PORTADOR = BC.ID_BANCO
  LEFT JOIN PLANO_DE_CONTAS PCC
    ON FI.ID_CONTA_CREDITO = PCC.ID_PLANO
  LEFT JOIN OPERACAO_FISCAL OPF
    ON FI.ID_OPERACAO_FISCAL = OPF.ID_OPERACAO_FISCAL
  LEFT JOIN CENTRO_DE_CUSTO CC
    ON FI.ID_CENTRO_DE_CUSTO = CC.ID_CENTRO_DE_CUSTO
  LEFT JOIN PLANO_DE_CONTAS PCD
    ON FI.ID_CONTA_DEBITO = PCD.ID_PLANO
WHERE FI.TIPO_LANCAMENTO = ´R´
UNION ALL
SELECT FI.*,
       LJ.NOME_RAZAO,
       LJ.COD_FILIAL,
       BC.DESCRICAO,
       CC.DESCRICAO,
       PCC.NOME_CONTA,
       PCD.NOME_CONTA,
       PCC.CONTA_REDUZIDA,
       PCD.CONTA_REDUZIDA,
       PCC.CONTA,
       PCD.CONTA,
       FR.NOME_RAZAO,
       FR.CNPF_CNPJ,
       OPF.DESCRICAO,
       OPF.CODIGO_OPERACAO_FISCAL
FROM FINANCEIRO FI
  LEFT JOIN FORNECEDOR´ FR
    ON FI.ID_CLIENTE = FR.ID_FORNECEDOR
  LEFT JOIN LOJA LJ
    ON FI.ID_LOJA = LJ.ID_LOJA
  LEFT JOIN BANCO BC
    ON FI.ID_PORTADOR = BC.ID_BANCO
  LEFT JOIN PLANO_DE_CONTAS PCC
    ON FI.ID_CONTA_CREDITO = PCC.ID_PLANO
  LEFT JOIN OPERACAO_FISCAL OPF
    ON FI.ID_OPERACAO_FISCAL = OPF.ID_OPERACAO_FISCAL
  LEFT JOIN CENTRO_DE_CUSTO CC
    ON FI.ID_CENTRO_DE_CUSTO = CC.ID_CENTRO_DE_CUSTO
  LEFT JOIN PLANO_DE_CONTAS PCD
    ON FI.ID_CONTA_DEBITO = PCD.ID_PLANO
WHERE FI.TIPO_LANCAMENTO = ´P´
ORDER BY Nr. das colunas



Responder

Gostei + 0

01/03/2005

Delphi32

ou com o CASE WHEN ficaria:

SELECT FI.*, 
       LJ.NOME_RAZAO AS NOME_LOJA, 
       LJ.COD_FILIAL AS FILIAL, 
       BC.DESCRICAO AS NOME_BANCO, 
       CC.DESCRICAO AS NOME_CUSTO, 
       PCC.NOME_CONTA AS NOME_CONTA_CREDITO, 
       PCD.NOME_CONTA AS NOME_CONTA_DEBITO, 
       PCC.CONTA_REDUZIDA AS CONTA_REDUZ_CREDITO, 
       PCD.CONTA_REDUZIDA AS CONTA_REDUZ_DEBITO, 
       PCC.CONTA AS CONTA_CREDITO, 
       PCD.CONTA AS CONTA_DEBITO, 
       (CASE FI.ID_CLIENTE WHEN ´P´ THEN FR.NOME_RAZAO ELSE CL.NOME_RAZAO END)  AS NOME_CLIENTE,
       (CASE FI.ID_CLIENTE WHEN ´P´ THEN FR.CNPF_CNPJ ELSE CL.CNPF_CNPJ END) AS CNPF_CNPJ_CLIENTE, 
       OPF.DESCRICAO AS NOME_OPERACAO_FISCAL, 
       OPF.CODIGO_OPERACAO_FISCAL AS CODIGO_OPERACAO_FISCAL 
FROM FINANCEIRO FI 
  LEFT JOIN CLIENTE CL 
    ON FI.ID_CLIENTE = CL.ID_CLIENTE 
  LEFT JOIN FORNECEDOR´ FR 
    ON FI.ID_CLIENTE = FR.ID_FORNECEDOR 
  LEFT JOIN LOJA LJ 
    ON FI.ID_LOJA = LJ.ID_LOJA 
  LEFT JOIN BANCO BC 
    ON FI.ID_PORTADOR = BC.ID_BANCO 
  LEFT JOIN PLANO_DE_CONTAS PCC 
    ON FI.ID_CONTA_CREDITO = PCC.ID_PLANO 
  LEFT JOIN OPERACAO_FISCAL OPF 
    ON FI.ID_OPERACAO_FISCAL = OPF.ID_OPERACAO_FISCAL 
  LEFT JOIN CENTRO_DE_CUSTO CC 
    ON FI.ID_CENTRO_DE_CUSTO = CC.ID_CENTRO_DE_CUSTO 
  LEFT JOIN PLANO_DE_CONTAS PCD 
    ON FI.ID_CONTA_DEBITO = PCD.ID_PLANO


É importante lembrar que em ambos os casos o campo NOME_RAZAO da tabela de clientes e fornecedores devem ser do mesmo tipo e tamanho assim como os campos CNPF_CNPJ das mesmas tabelas. Caso eles não sejam do mesmo tipo e tamanho bastaria colocar o CASE dentro de um CAST.

Até!


Responder

Gostei + 0

10/03/2005

As-mad

Nunca tinha visto esse Case When, ele só pode ser usado para os campos do Select ?


Responder

Gostei + 0

10/03/2005

Afarias

[quote:ccc33ee9e3=´AS-Mad´]Nunca tinha visto esse Case When, ele só pode ser usado para os campos do Select ?[/quote:ccc33ee9e3]

Não.


T+


Responder

Gostei + 0

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

Aceitar