AJUDA COM CONSULTA SQL

 Tópico anterior Próximo tópico Novo tópico

AJUDA COM CONSULTA SQL

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#491663 - 03/12/2019 11:43:57

HIDDEN
GOIANIA
Cadast. em:Julho/2009


Preciso fazer uma consulta que, dependendo do valor de uma coluna, me retorne uma coluna B ou C.

    SELECT
        JDT1.TransId
        ,JDT1.TransType
        ,JDT1.BaseRef
        ,Conta=IIF(SourceLine=1,JDT1.ShortName,JDT1.Account)
        ,ContaName=IIF(SourceLine=1, OCRD.CardName, OACT.AcctName)
        ,JDT1.Debit AS Debito
        ,JDT1.Credit AS Credito
        ,JDT1.FCDebit AS DebitoFC
        ,JDT1.FCCredit AS FCCredit
        ,JDT1.RefDate
        ,JDT1.TaxDate
        ,JDT1.DueDate
        ,JDT1.ContraAct
        ,JDT1.LineMemo
    FROM JDT1
    INNER JOIN OJDT ON OJDT.TransId=JDT1.TransId
    WHERE
        OJDT.RefDate BETWEEN '2019-12-02' AND '2019-12-02'
    ORDER BY
        JDT1.TransID


Eu consegui fazer parte. Em Conta=IIF(SourceLine=1,JDT1.ShortName,JDT1.Account), eu analiso se me retorna o código do cliente (JDT1.ShortName) ou o código da conta contábil (JDT1.Account).

Porém, na linha ContaName=IIF(SourceLine=1, OACT.AcctName, OCRD.CardName) eu preciso retornar o nome do cliente ou da conta contábil. O problema aí é o JOIN. Alguém sabe me ajudar a construir esse JOIN, para me retornar dados das tabelas OCRD ou OACT?



#491669 - 03/12/2019 16:13:33

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe

Última edição em 03/12/2019 16:28:39 por FOXMAN

Precisa informar o banco de dados....

Basta vc colocar outro JOIN para a tabela desejada...

INNER JOIN OCRD ON JDT1.Account = OCRD.seucampo


Caso deseje que todos os registros da tabela JDT1 sejam exibidos .... utilize um
LEFT JOIN
,
se desejar que todos os registros da tabela OCRD sejam exibidos, utilize um
RIGHT JOIN
.
Agora se deseja que apenas os registros que são coincidentes em abas as tabelas sejam exibidos , ai tu usa o
INNER JOIN







Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#491673 - 04/12/2019 08:07:47

HIDDEN
GOIANIA
Cadast. em:Julho/2009


Citação:
:
Precisa informar o banco de dados....

Basta vc colocar outro JOIN para a tabela desejada...

INNER JOIN OCRD ON JDT1.Account = OCRD.seucampo


Caso deseje que todos os registros da tabela JDT1 sejam exibidos .... utilize um
LEFT JOIN
,
se desejar que todos os registros da tabela OCRD sejam exibidos, utilize um
RIGHT JOIN
.
Agora se deseja que apenas os registros que são coincidentes em abas as tabelas sejam exibidos , ai tu usa o
INNER JOIN






Note que em
,ContaName=IIF(SourceLine=1, OCRD.CardName, OACT.AcctName)
eu posso ter duas tabelas. Eu teria que fazer dois JOIN, o que me traz resultado errado:

INNER JOIN OCRD ON OCRD.CardCode=JDT1.ShortName
INNER JOIN OACT ON OACT.AcctCode=JDT1.Account


Eu acho que deveria haver um condicional para definir qual JOIN utilizar. Não sei...



#491690 - 04/12/2019 15:27:04

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
:
Precisa informar o banco de dados....

Basta vc colocar outro JOIN para a tabela desejada...

INNER JOIN OCRD ON JDT1.Account = OCRD.seucampo


Caso deseje que todos os registros da tabela JDT1 sejam exibidos .... utilize um
LEFT JOIN
,
se desejar que todos os registros da tabela OCRD sejam exibidos, utilize um
RIGHT JOIN
.
Agora se deseja que apenas os registros que são coincidentes em abas as tabelas sejam exibidos , ai tu usa o
INNER JOIN






Note que em
,ContaName=IIF(SourceLine=1, OCRD.CardName, OACT.AcctName)
eu posso ter duas tabelas. Eu teria que fazer dois JOIN, o que me traz resultado errado:

INNER JOIN OCRD ON OCRD.CardCode=JDT1.ShortName
INNER JOIN OACT ON OACT.AcctCode=JDT1.Account


Eu acho que deveria haver um condicional para definir qual JOIN utilizar. Não sei...


Defina ALIAS para as tabelas....
Tipo:

SELECT
        JDT1.TransId
        ,JDT1.TransType
        ,JDT1.BaseRef
        ,Conta=IIF(SourceLine=1,JDT1.ShortName,JDT1.Account)
        ,ContaName=IIF(SourceLine=1, OC.CardName, OA.AcctName)
        ,JDT1.Debit AS Debito
        ,JDT1.Credit AS Credito
        ,JDT1.FCDebit AS DebitoFC
        ,JDT1.FCCredit AS FCCredit
        ,JDT1.RefDate
        ,JDT1.TaxDate
        ,JDT1.DueDate
        ,JDT1.ContraAct
        ,JDT1.LineMemo
    FROM JDT1
    INNER JOIN OJDT OT ON OT.TransId=JDT1.TransId
    INNER JOIN OCRD OC ON OC.SEUCAMPO = JDT1.SEUCAMPO
     #considere verificar qual tabel terá referencia a tabela desejada
    INNER JOIN OACT OA ON OA.SEUCAMPO = JDT1.SEUCAMPO
    #considere verificar qual tabel terá referencia a tabela desejada
    WHERE
        OT.RefDate BETWEEN '2019-12-02' AND '2019-12-02'
    ORDER BY
        JDT1.TransID


Como comentei no exemplo, precisa saber qual é o relacionamento correto....
Este exemplo retornara todos os registros se :
JDT1 tiver um registro em OJDT onde TransID de JDT1 = TransID de OJDT. Este é o primeiro filtro.
Dai para frente vc é quem vai determinar qual relacionamento deve ser feito.
SE É OCRD com JDT1, ou
OACT com OCRD, e assim por diante....

Tenta ai e retorne :



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário