Por favor : Consulta SQL para titulos (boletos) já vencidos

SQL

31/01/2017

Bom dia, tenho duas tabelas (CadTitulos e CadBaixas), em CadTitulos eu cadastros o título (boleto), quando esse titulo é pago eu dou baixa em CadBaixas. A ideia é identificar o título atrasado e lançar um aviso no respectivo Form

Segue a descrição das duas tabelas

/***********************************************/
/* TABELA CADASTRO DE TITULOS */
/***********************************************/
create table CADTITULOS (
TI_FORNECEDOR INTEGER NOT NULL,
TI_NUMERO CHAR(15) NOT NULL,
TI_VALOR NUMERIC(10,2) NOT NULL,
TI_EMISSAO DATE NOT NULL,
TI_DATA_DOC DATE NOT NULL,
TI_VENCIMENTO DATE NOT NULL,
TI_OBS VARCHAR(40),
TI_USUARIO INTEGER NOT NULL,
TI_NUMNOTA INTEGER,

constraint PK_CADTITULOS primary key (TI_FORNECEDOR, TI_NUMERO),

constraint FK_CADTITULOS foreign key (TI_FORNECEDOR) REFERENCES FORNECEDORES(F_NUMERO)
);

/***********************************************/
/* TABELA CADASTRO DE BAIXAS */
/***********************************************/
create table CADBAIXAS (
BX_FORNECEDOR INTEGER NOT NULL,
BX_NUMERO CHAR(15) NOT NULL,
BX_DATA DATE NOT NULL,
BX_DEPARTAMENTO INTEGER NOT NULL,
BX_LANCAMENTO INTEGER NOT NULL,
BX_VALOR NUMERIC(10,2) NOT NULL,
BX_JUROS NUMERIC(10,2) NOT NULL,
BX_DESCONTOS NUMERIC(10,2) NOT NULL,
BX_OBS VARCHAR(30),
BX_USUARIO INTEGER NOT NULL,
BX_INTLANC INTEGER NOT NULL,

constraint PK_CADBAIXAS primary key (BX_FORNECEDOR, BX_NUMERO, BX_DATA),

constraint FK_CADBAIXAS foreign key (BX_FORNECEDOR, BX_NUMERO) REFERENCES CADTITULOS(TI_FORNECEDOR, TI_NUMERO) ON DELETE CASCADE
);
CREATE INDEX IX_INTLANC_BAIXAS ON CADBAIXAS (BX_INTLANC);
/************************************************/
/* GENERATOR de BAIXAS DE TITULOS */
/************************************************/
CREATE GENERATOR GEN_BAIXASTIT_NUM;


Observem que os campos (BX_FORNECEDOR, BX_NUMERO) são chave estrangeira de CadTitulos.
Emanuel Gonçalves

Emanuel Gonçalves

Curtidas 0

Respostas

Daniel Araújo

Daniel Araújo

31/01/2017

Bom dia Emanuel!

Acredito que assim resolva:
SELECT *
  FROM CADTITULOS
 WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
   AND CAST(TI_FORNECEDOR AS CHAR(15)) + TI_NUMERO NOT IN (
     SELECT CAST(BX_FORNECEDOR AS CHAR(15)) + BX_NUMERO
       FROM CADBAIXAS
   )


Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

31/01/2017

Bom dia Emanuel!

Acredito que assim resolva:
SELECT *
  FROM CADTITULOS
 WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
   AND CAST(TI_FORNECEDOR AS CHAR(15)) + TI_NUMERO NOT IN (
     SELECT CAST(BX_FORNECEDOR AS CHAR(15)) + BX_NUMERO
       FROM CADBAIXAS
   )


Daniel Araújo
http://doispontozero-programador.blogspot.com.br/


Daniel obrigado.

Eu estou executando o SQL dentro de uma query e o mesmo está retornando o seguinte erro ao executar

[FireDAC][Phys][FB]dynamic SLQ Error
expression evaluation not supported
string cannot be added or subtracted in dialect 3
GOSTEI 0
Daniel Araújo

Daniel Araújo

31/01/2017

Boa tarde Emanuel!

Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO
FROM CADBAIXAS
)
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

31/01/2017

Boa tarde Emanuel!

Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO
FROM CADBAIXAS
)


Daniel só rodou modificando o código GETDATE por CURRENT_DATE, o detalhe é que ele me retornou os títulos com vencimento futuro.

você tem um e-mail para contato?
GOSTEI 0
Daniel Araújo

Daniel Araújo

31/01/2017

Foi mal Emanuel!

Errei no sinal. Faz assim:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO < CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO
FROM CADBAIXAS
)


Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
GOSTEI 0
Emanuel Gonçalves

Emanuel Gonçalves

31/01/2017

Foi mal Emanuel!

Errei no sinal. Faz assim:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO < CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO
FROM CADBAIXAS
)


Daniel Araújo
http://doispontozero-programador.blogspot.com.br/


Obrigado Daniel, deu certo. A consulta ficou bem lenta, sem duvida pq os números de registros nas duas tabelas são bem grandes
GOSTEI 0
POSTAR