 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Fev 21, 2019 4:28 pm Assunto: Montando um select firebird 2.5? |
|
|
Tenho este select
Código: | SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
coalesce(c.Valor_Contrato_Mensal, 0.0) AS Cost,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
WHERE cs.codigo_cliente = 17041 |
Veio 3 resultados no select
e na coluna product veio os codigos
5
1
93
Tenho uma SP que faz uns calculos e traz o valor de cada produto
Código: | SELECT produtos.codigo,
COALESCE(SUM(sp_ret_vl_contratos_cli.valor),0) as valor
FROM sp_ret_vl_contratos_cli(:Pcodigo_cliente, '')
INNER JOIN produtos on produtos.codigo = sp_ret_vl_contratos_cli.codigo_software
GROUP BY produtos.codigo, produtos.nome |
Neste resultado veio os produtos
1
93
que tem valor
Tem como associar esta SP ao select acima e mudar esta coluna abaixo
Código: | coalesce(c.Valor_Contrato_Mensal, 0.0) AS Cost, |
pela SP em seus respectivos IDs? _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Fev 21, 2019 5:11 pm Assunto: |
|
|
Boa tarde,
Essa SP retorna mais de um registro por produto? Esse Sum é mesmo necessário?
Se essa SP retorna só um registro por produto, acredito que o Sum não seja necessário e nesse caso me parece que você pode adicionar um Join no primeiro Select com a SP.
Espero que ajude
_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Fev 21, 2019 6:20 pm Assunto: |
|
|
imex escreveu: | Boa tarde,
Essa SP retorna mais de um registro por produto? Esse Sum é mesmo necessário?
Se essa SP retorna só um registro por produto, acredito que o Sum não seja necessário e nesse caso me parece que você pode adicionar um Join no primeiro Select com a SP.
Espero que ajude
_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa |
Então Imex, creio que retorne apenas um registro por produto, seria desta forma então o select?
Código: | SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
--coalesce(c.Valor_Contrato_Mensal, 0.0) AS Cost,
COALESCE(SUM(sp_ret_vl_contratos_cli.valor),0.0) as Cost,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
LEFTJOIN sp_ret_vl_contratos_cli(:Pcodigo_cliente, '') ON sp_ret_vl_contratos_cli.codigo_software = cs.codigo_software
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
WHERE cs.codigo_cliente = :Pcodigo_cliente
GROUP BY AZCode, Customer, Product, Subscription, QuantidadeParcelas, LiberadoAte, Liberado |
Obrigado por ajudar. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 10:33 am Assunto: |
|
|
Experimente fazer uns testes mais ou menos dessa forma:
Código: | WITH CTE_SP as
(
SELECT codigo_software, SUM(valor) as valor
FROM sp_ret_vl_contratos_cli(:Pcodigo_cliente, '')
GROUP BY codigo_software
)
SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN CTE_SP sp on sp.codigo_software = cs.Codigo_Software
WHERE cs.codigo_cliente = 17041 |
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 22, 2019 10:41 am Assunto: |
|
|
imex escreveu: | Experimente fazer uns testes mais ou menos dessa forma:
Código: | WITH CTE_SP as
(
SELECT codigo_software, SUM(valor) as valor
FROM sp_ret_vl_contratos_cli(:Pcodigo_cliente, '')
GROUP BY codigo_software
)
SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN CTE_SP sp on sp.codigo_software = cs.Codigo_Software
WHERE cs.codigo_cliente = 17041 |
Espero que ajude |
Pra forma acima que postei fica na mesma
Código: | WITH CTE_SP as
(
SELECT codigo_software, SUM(valor) as valor
FROM sp_ret_vl_contratos_cli(:CODIGO_CLI, '')
GROUP BY codigo_software
)
SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN CTE_SP sp on sp.codigo_software = cs.Codigo_Software
WHERE cs.codigo_cliente = :CODIGO_CLI |
Ou seja repete os valores
Citação: | Verifiquei aqui Imex, e as vezes pode trazer mais de um valor no produto sim.
Ai duplicou o valor
Na sp traz assim
Código: | produto----valor-------data-----quantidade
1-------------46,00----11/12/18----------1
1---------46.000,00---15/02/19----------1000 |
No select ficou
Código: | 1-----------46.046,00
1-----------46.046,00 |
|
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 22, 2019 10:50 am Assunto: |
|
|
Se ajudar vou deixar a SP postada, pra ver. Pode modificar o result da SP caso precise.
Código: | create or alter procedure SP_RET_VL_CONTRATOS_CLI (
CLIENTE_CODIGO integer,
PONTOS_REVENDA varchar(1))
returns (
CODIGO_SOFTWARE integer,
CLIENTE integer,
VALOR double precision,
DATA_AQUISICAO date,
QUANTIDADE integer,
REAJUSTE double precision,
VALOR_RECORRENTE double precision,
VALOR_COPIA_PRIN_ATUAL integer)
as
declare variable VALOR_COPIA_ADIC double precision;
declare variable COD_SOFT integer;
declare variable VALOR_COPIA_PRIN double precision;
declare variable VALOR_TOTAL_CONTRATO double precision;
declare variable CLIENTE_TEMP integer;
declare variable QTDE integer;
declare variable COD_CLIENTE integer;
declare variable DATA date;
declare variable DATA_CONTRATO date;
declare variable DATA_VALOR_REAL date;
declare variable AT_PROVISORIO char(3);
declare variable CONT_SUPORTE char(3);
declare variable PAGA_BOLETO char(3);
declare variable VALOR_BOLETO double precision;
declare variable VALOR_DESCONTO double precision;
declare variable VALOR_COPIA_PRINCIPAL_AZ double precision;
declare variable VALOR_COPIA_ADICIONAL_AZ double precision;
declare variable VALOR_AZ double precision;
declare variable REAJUSTE_RECORENTE double precision;
BEGIN /* Procedure Text */
CLIENTE_TEMP = 0;
FOR
SELECT CS.CODIGO_CLIENTE,
CS.DATA_HORA,
CS.QUANTIDADE,
CS.codigo_software,
coalesce(C.VALOR_COPIA_PRINCIPAL, 0),
C.ATENDIMENTO_PROVISORIO,
C.CONTRATO_SUPORTE_LIBERADO,
C.DATA_CONTRATO,
coalesce(C.DESCONTO_CONTRATO, 0),
coalesce(C.PAGA_BOLETO, 0),
C.REAJUSTE,
VB.CLIENTE
FROM CLIENTE_SOFTWARE CS
LEFT JOIN cliente C ON C.CODIGO = CS.CODIGO_CLIENTE,
VALORES_BOLETOS VB
WHERE CS.TIPO <> 'Locado'
AND -- CS.PAGO_ONLINE <> 'S' AND
CS.CODIGO_SOFTWARE IN
(SELECT CODIGO
FROM PRODUTOS
WHERE SUPORTE_PAGO = 'Sim'
)
AND CS.CODIGO_CLIENTE = :CLIENTE_CODIGO -- and CS.PAGO_ONLINE <> 'S' /* produtos q foram pagos on line nao devem entrar no calculo do valor do contrato mensal */
ORDER BY CS.DATA_HORA INTO :COD_CLIENTE,
:DATA_AQUISICAO,
:QTDE,
:COD_SOFT,
:valor_copia_prin,
:at_provisorio,
:cont_suporte,
:DATA_CONTRATO,
:VALOR_DESCONTO,
:PAGA_BOLETO,
:REAJUSTE,
:VALOR_BOLETO DO BEGIN IF (at_provisorio = 'Não'
AND cont_suporte = 'Não'
AND pontos_revenda <> 'S') THEN DATA_AQUISICAO = CURRENT_DATE;
IF (pontos_revenda = 'S') THEN BEGIN DATA_VALOR_REAL = DATA_CONTRATO;
END ELSE BEGIN IF (:DATA_CONTRATO > :DATA_AQUISICAO) THEN DATA_VALOR_REAL = DATA_CONTRATO;
ELSE DATA_VALOR_REAL = DATA_AQUISICAO;
END
SELECT cp.valor_copia_principal
FROM contrato_precos cp
JOIN produtos p ON p.codigo = cp.codigo_produto
AND p.suporte_pago = 'Sim'
WHERE cp.codigo_produto = :COD_SOFT
AND cp.data =
(SELECT max(cp.data)
FROM contrato_precos cp
WHERE cp.data <= :data_valor_real
AND cp.codigo_produto = :COD_SOFT) INTO :valor_copia_prin_atual;
IF (cod_soft = 1) THEN BEGIN IF (valor_copia_prin_atual > valor_copia_prin) THEN
BEGIN
valor_desconto = valor_desconto + (valor_copia_prin_atual - valor_copia_prin);
valor_copia_prin = valor_copia_prin_atual;
END
IF (valor_copia_prin_atual < valor_copia_prin) THEN
BEGIN
reajuste = reajuste + (valor_copia_prin - valor_copia_prin_atual);
valor_copia_prin = valor_copia_prin_atual;
END
END
ELSE
BEGIN
valor_copia_prin = valor_copia_prin_atual;
END -- if (VALOR_PRINCIPAL is not null) then
-- valor_copia_prin = VALOR_PRINCIPAL;
IF (CLIENTE_TEMP <> COD_CLIENTE) THEN
BEGIN
CLIENTE_TEMP = COD_CLIENTE;
VALOR_TOTAL_CONTRATO = 0;
SELECT max(DATA)
FROM CONTRATO_PRECOS
WHERE DATA <= :DATA_VALOR_REAL
AND CODIGO_PRODUTO = :COD_SOFT INTO :DATA;
SELECT coalesce(VALOR_COPIA_ADICIONAL, 0),
Coalesce(VALOR_COPIA_ADICIONAL_AZ, 0),
coalesce(VALOR_COPIA_PRINCIPAL_AZ, 0)
FROM CONTRATO_PRECOS
WHERE DATA =:DATA
AND CODIGO_PRODUTO = :COD_SOFT INTO :VALOR_COPIA_ADIC,
:VALOR_COPIA_ADICIONAL_AZ,
:VALOR_COPIA_PRINCIPAL_AZ;
IF (pontos_revenda = 'S') THEN BEGIN VALOR_TOTAL_CONTRATO = VALOR_COPIA_PRIN + (VALOR_COPIA_ADIC * (QTDE-1));
valor_AZ = valor_copia_principal_az + (valor_copia_adicional_az * (QTDE-1));
IF (VALOR_DESCONTO IS NOT NULL) THEN BEGIN VALOR_TOTAL_CONTRATO = VALOR_TOTAL_CONTRATO - VALOR_DESCONTO;
valor_AZ = valor_AZ - VALOR_DESCONTO;
END reajuste_recorente = ((reajuste * 100)/valor_total_contrato)/100;
valor_recorrente = VALOR_TOTAL_CONTRATO - valor_AZ;
valor_recorrente = valor_recorrente + (valor_recorrente * reajuste_recorente);
END ELSE BEGIN VALOR_TOTAL_CONTRATO = VALOR_COPIA_PRIN + (VALOR_COPIA_ADIC * (QTDE-1))+ REAJUSTE;
IF (VALOR_DESCONTO IS NOT NULL) THEN VALOR_TOTAL_CONTRATO = VALOR_TOTAL_CONTRATO - VALOR_DESCONTO;
IF (PAGA_BOLETO = 'Sim') THEN VALOR_TOTAL_CONTRATO = VALOR_TOTAL_CONTRATO + VALOR_BOLETO;
END codigo_software = cod_soft;
CLIENTE = CLIENTE_TEMP;
VALOR = VALOR_TOTAL_CONTRATO;
QUANTIDADE = QTDE;
END ELSE BEGIN
SELECT max(DATA)
FROM CONTRATO_PRECOS
WHERE DATA <= :DATA_VALOR_REAL
AND CODIGO_PRODUTO = :COD_SOFT INTO :DATA;
SELECT VALOR_COPIA_ADICIONAL,
VALOR_COPIA_ADICIONAL_AZ,
VALOR_COPIA_PRINCIPAL_AZ
FROM CONTRATO_PRECOS
WHERE DATA =:DATA
AND CODIGO_PRODUTO = :COD_SOFT INTO :VALOR_COPIA_ADIC,
:VALOR_COPIA_ADICIONAL_AZ,
:VALOR_COPIA_PRINCIPAL_AZ;
IF (pontos_revenda = 'S') THEN BEGIN VALOR_TOTAL_CONTRATO = (VALOR_COPIA_ADIC * QTDE);
valor_AZ = valor_copia_adicional_az * QTDE;
reajuste_recorente = ((reajuste * 100)/valor_total_contrato)/100;
valor_recorrente = VALOR_TOTAL_CONTRATO - valor_AZ;
valor_recorrente = valor_recorrente + (valor_recorrente * reajuste_recorente);
END VALOR_TOTAL_CONTRATO = (VALOR_COPIA_ADIC * QTDE);
codigo_software = cod_soft;
CLIENTE = CLIENTE_TEMP;
VALOR = VALOR_TOTAL_CONTRATO;
QUANTIDADE = QTDE;
END suspend;
END
END |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 11:16 am Assunto: |
|
|
Não entendi porque na query que postei está sendo feito o agrupamento com Sum por produto. Se você fizer uns testes só com o trecho abaixo deve obter apenas um registro por produto:
Código: | WITH CTE_SP as
(
SELECT codigo_software, SUM(valor) as valor
FROM sp_ret_vl_contratos_cli(:Pcodigo_cliente, '')
GROUP BY codigo_software
)
select * from CTE_SP |
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 12:24 pm Assunto: |
|
|
Mas nesse caso não é a primeira query sem a SP que está retornando mais de um registro para o mesmo produto? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 2:59 pm Assunto: |
|
|
Se você quer os valores separados, acho que você teria que verificar a possibilidade de a SP retornar a chave do registro para poder fazer o Join com a primeira query. Ou então verificar se os campos codigo_software e data_hora juntos duplicam; se não duplicam seria possível fazer o Join da SP na primeira query com esses 2 campos. |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 22, 2019 3:12 pm Assunto: |
|
|
imex escreveu: | Se você quer os valores separados, acho que você teria que verificar a possibilidade de a SP retornar a chave do registro para poder fazer o Join com a primeira query. Ou então verificar se os campos codigo_software e data_hora juntos duplicam; se não duplicam seria possível fazer o Join da SP na primeira query com esses 2 campos. |
Você diz assim?
Código: | WITH CTE_SP as
(
SELECT codigo_software,
data_aquisicao,
SUM(valor) as valor
FROM sp_ret_vl_contratos_cli(:CODIGO_CLI, '')
GROUP BY codigo_software, data_aquisicao
)
SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN CTE_SP sp on (sp.codigo_software = cs.Codigo_Software AND sp.data_aquisicao = cs.Data_Hora)
WHERE cs.codigo_cliente = :CODIGO_CLI |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 4:01 pm Assunto: |
|
|
Sem a CTE porque não teria mais que somar/agrupar:
Código: | SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN sp_ret_vl_contratos_cli(:CODIGO_CLI, '') sp on (sp.codigo_software = cs.Codigo_Software AND sp.data_aquisicao = cs.Data_Hora)
WHERE cs.codigo_cliente = :CODIGO_CLI |
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 22, 2019 4:06 pm Assunto: |
|
|
imex escreveu: | Sem a CTE porque não teria mais que somar/agrupar:
Código: | SELECT cs.ID_Cliente_Software AS AZCode,
cs.Codigo_Cliente AS Customer,
cs.Codigo_Software AS Product,
cs.Data_Hora AS Subscription,
COALESCE(sp.valor, 0) as valor,
( SELECT count(*)
FROM financeiro_contas fc
WHERE addday(fc.data_vencimento,
(SELECT FIRST 1 Dias_Tolerancia
FROM Financeiro_Cobranca_Config
ORDER BY PK_Financeiro_Cobranca_Config DESC)) <= CURRENT_DATE
AND fc.data_quitacao IS NULL
AND fc.cancelado <> 'Sim'
AND fc.Boleto = 'Sim'
AND fc.Codigo_Cliente = cs.Codigo_Cliente ) AS QuantidadeParcelas,
coalesce(c.Data_Limite_Liberacao, cast(addday(CURRENT_DATE, -1) AS date)) AS LiberadoAte,
coalesce(c.Contrato_Suporte_Liberado, 'Não') AS Liberado
FROM Cliente_Software cs
INNER JOIN Cliente c ON c.Codigo = cs.Codigo_Cliente
LEFT JOIN sp_ret_vl_contratos_cli(:CODIGO_CLI, '') sp on (sp.codigo_software = cs.Codigo_Software AND sp.data_aquisicao = cs.Data_Hora)
WHERE cs.codigo_cliente = :CODIGO_CLI |
Espero que ajude | Entendi. Muito obrigado. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|