Usuário com melhor resposta
Mostrar o resultado da segunda condição somente se tiver a primeira

Pergunta
-
Bom dia pessoal!
Estou com uma dificuldade em como montar uma query com algumas condicionais e uma delas o resultado só vai aparecer se tiver a condição anterior. Vou tentar explicar abaixo:
Tenho uma relação de débitos por empresa no período: 2014 a 2017
Esses débitos são de dois tipos: 'SI' e 'AS'
Preciso listar por empresa todos os débitos SI neste período e listar os débitos AS apenas das empresas que também tenha débitos SI neste período.
Além disso tenho alguns critérios para colocar que são filtros para ambos os pagamentos, que são definições do tipo, processo, atividade, local e etc...
Por favor, alguém pode me dar uma luz de como montar isso? Eu tentei usar CASE, IF, mas não consegui montar a lógica para o caso de débitos AS mostrar somente se também tiver débitos SI.
SELECT
DEB.EMPRESA AS Codigo_Empresa, CGC_CCM AS CNPJ,RAZ_SOC AS Razao_Social, EMP.QTD_SOC AS Socios, DEB.TIPO AS TIPO_Rec, DEBITO, COUNT(PARCELA) AS Parcelas_em_aberto, SUM(DEB.VL_DEB) AS Valor_Total_Debito, CONVERT(varchar, DT_PAGAMENTO, 105) AS Data_Ultimo_Pagamento, AR.CODIGO, AR.NOME, AT.COD_ATIV,AT.DESCRICAO
FROM DEBITOS AS DEB
INNER JOIN EMPRESAS AS EMP ON DEB.EMPRESA = EMP.EMPRESA
LEFT JOIN AREA AR ON EMP.AREA_ADM = AR.CODIGO
LEFT JOIN ATIVIDADE AT ON EMP.COD_ATIV = AT.COD_ATIV
OUTER APPLY ( SELECT TOP 1 DT_PAGAMENTO, TOT_PAGO, TIPO FROM PAGAMENTOS AS PAG
WHERE EMP.EMPRESA= PAG.EMPRESA ORDER BY DT_PAGAMENTO DESC, RECNUM DESC) AS UltimoPagamentoWHERE DEB.PROCESSO IN (' ','M') AND DEB.PASTA=0 AND DT_PAGAMENTO>'2010-01-01' AND AT.COD_ATIV IN (51,34,35,29,55,20,19,18,36,15,14,54,53,7,8,28,1,11,13,2,30,27,12,59,6,16,24,0,4,61, 60) AND
( CASE WHEN DEB.TIPO='S' AND DEB.DT_VENCTO BETWEEN '2014-01-01' AND '2017-12-31' THEN DEB.DT_VENCTO >= '2013-08-01' AND '2017-12-31' and DEB.TIPO in ('A';'S') END ) AS DEBITO
GROUP BY DEB.EMPRESA, CGC_CCM, RAZ_SOC, DEB.TIPO, EMP.QTD_SOC, DT_PAGAMENTO, AR.CODIGO, AR.NOME, AT.COD_ATIV, AT.DESCRICAO
ORDER BY Codigo_Empresa
Muito obrigada!!!
Mariana
Respostas
-
-
Deleted
- Marcado como Resposta Mariana.Sky sexta-feira, 15 de junho de 2018 14:56
Todas as Respostas
-
-
( CASE WHEN DEB.TIPO='SI' AND DEB.DT_VENCTO BETWEEN '2014-01-01' AND '2017-12-31'
THEN DEB.DT_VENCTO >= '2013-08-01' AND '2017-12-31' and DEB.TIPO in ('AS';'SI')END ) AS DEBITO
Como se descobre que uma empresa está em débito? Desculpe, estava com os nomes errados. Os debitos são todos os registros que tiverem com AS e SI em TIPO.
Como se identificam débitos do tipo SI e AS? Tem uma coluna na tabela chamada TIPO e lá está AS ou SI
O que contêm as tabelas PAGAMENTOS e DEBITOS? Essas tabelas são bem semelhantes. Está assim:
Empresa | Data Vencimento| Tipo| Ano| Parcela -Tabela Debitos
321 | 01/01/2017 | AS| 2017 | 1Empresa | Data Vencimento| Tipo| Ano| Parcela -Tabela Pagamentos
321 | 01/01/2017 | SI| 2017 | 1
322 | 01/05/2017 | AS| 2017 | 5
322 | 01/05/2017 | SI| 2017 | 5Obrigada!!!!
-
-
Oi Jose! Desculpe passar só parte da informação, queria não escrever algo muito extenso e não me atentei a isso. Funciona assim. Tenho uma tabela de Empresas com todos os dados da empresa, outra tabela que é alimentada somente com os Pagamentos e outra tabela somente com os Débitos.
As tabelas de Débitos e Pagamentos são bem parecidas, em todas elas eu tenho o código da empresa para se relacionarem. Então vou comentar os campos do meu SELECT para ver se consigo me explicar melhor...
O que eu preciso é consultar os debitos num período e listar por empresa. E preciso que a relação seja feita assim, todos as empresas com débitos SI no período, a partir daí todas as empresas que tem débito AS, ou seja, os débitos AS da empresa só vão aparecer se tiver débito SI. Cada linha da tabela é um debito, contando pela Data de vencimento, Ano e Parcela, sendo assim, consigo contar quantos débitos a empresa tem pelo count(parcela). Na tabela de débitos é assim: Exemplo: Código da Empresa| Data Vencimento|Ano|Parcela|Valor Debito 322|01/11/2017|2017|11|R$300,00
Não sei se consegui me fazer entender muito bem.
SELECT
DEB.EMPRESA AS Codigo_Empresa, -- CÓDIGO DA EMPRESA (CHAVE PRIMÁRIA) DA TABELA DEBITOS EMP.CGC_CCM AS CNPJ, -- CNPJ DA EMPRESA DA TABELA EMPRESAS
EMP.RAZ_SOC AS Razao_Social, --RAZAO SOCIAL DA TABELA EMPRESAS
EMP.QTD_SOC AS Socios, --SOCIOS DA TABELA EMPRESA
DEB.TIPO AS TIPO_Rec, --TIPO DE DEBITO DA TABELA DEBITOS
DEBITO, COUNT(DEB.PARCELA) AS Parcelas_em_aberto, --QUANTIDADE DE PARCELAS EM ABERTO DA TABELA DEBITOS
SUM(DEB.VL_DEB) AS Valor_Total_Debito, --SOMA DE VALOR EM ABERTO DA TABELA DEBITOS CONVERT(varchar, DT_PAGAMENTO, 105) AS Data_Ultimo_Pagamento,
AR.NOME, --NOME DA UNIDADE DA EMPRESA FILIAIS DA TABELA AREA AT.DESCRICAO--ATIVIDADE DA EMPRESA DA TABELA ATIVIDADEFROM DEBITOS AS DEB INNER JOIN EMPRESAS AS EMP ON DEB.EMPRESA = EMP.EMPRESA LEFT JOIN AREA AR ON EMP.AREA_ADM = AR.CODIGO LEFT JOIN ATIVIDADE AT ON EMP.COD_ATIV = AT.COD_ATIV OUTER APPLY ( SELECT TOP 1 DT_PAGAMENTO, TOT_PAGO, TIPO FROM PAGAMENTOS AS PAG WHERE EMP.EMPRESA= PAG.EMPRESA ORDER BY DT_PAGAMENTO DESC, RECNUM DESC) AS UltimoPagamento
WHERE DEB.PROCESSO IN (' ','M') AND DEB.PASTA=0 AND DT_PAGAMENTO>'2010-01-01' ANDAT.COD_ATIV IN (51,34,35,29,55,20,19,18,36,15,14,54,53,7,8,28,1,11,13,2,30,27,12,59,6,16,24,0,4,61, 60) AND
( CASE WHEN DEB.TIPO='SI' AND DEB.DT_VENCTO BETWEEN '2014-01-01' AND '2017-12-31' THEN DEB.DT_VENCTO >= '2013-08-01' AND '2017-12-31' and DEB.TIPO in ('AS';'SI') END ) AS DEBITO
GROUP BY DEB.EMPRESA, CNPJ, RAZ_SOC, DEB.TIPO, EMP.QTD_SOC, DT_PAGAMENTO, AR.CODIGO, AR.NOME, AT.COD_ATIV, AT.DESCRICAO
ORDER BY Codigo_Empresa
Muito obrigada!!!
Mariana
-
Boa tarde,
Mariana, não consegui entender esse trecho do Case com essas datas, mas segue um script bem simplificado para testes que talvez possa ser adaptado para o seu caso:
declare @Debitos table (Empresa int, Valor decimal(19, 2), Tipo varchar(10)); insert into @Debitos values (1, 100, 'SI'), (1, 50, 'SI'), (1, 200, 'AS'), (2, 1, 'AS'), (2, 2, 'AS'), (3, 10, 'SI'), (3, 20, 'AS'), (4, 1000, 'SI'); with CTE_Sum as ( select Empresa, Tipo, sum(Valor) as Total, sum(case when Tipo = 'SI' then 1 else 0 end) over(partition by Empresa) as TemSI from @Debitos group by Empresa, Tipo ) select Empresa, Tipo, Total from CTE_Sum where Tipo = 'SI' or TemSI = 1
Espero que seja útil
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Boa tarde,
Mariana, não consegui entender esse trecho do Case com essas datas, mas segue um script bem simplificado para testes que talvez possa ser adaptado para o seu caso:
declare @Debitos table (Empresa int, Valor decimal(19, 2), Tipo varchar(10)); insert into @Debitos values (1, 100, 'SI'), (1, 50, 'SI'), (1, 200, 'AS'), (2, 1, 'AS'), (2, 2, 'AS'), (3, 10, 'SI'), (3, 20, 'AS'), (4, 1000, 'SI'); with CTE_Sum as ( select Empresa, Tipo, sum(Valor) as Total, sum(case when Tipo = 'SI' then 1 else 0 end) over(partition by Empresa) as TemSI from @Debitos group by Empresa, Tipo ) select Empresa, Tipo, Total from CTE_Sum where Tipo = 'SI' or TemSI = 1
Espero que seja útil
-
(A) Ainda não entendi qual a função da tabela de débito: (1) ela registra parcelas em atraso OU (2) todas as parcelas são registradas nela, tendo ou não sido pagas?
Quando uma parcela é paga, o que é registrado na tabela de débitos e o que é registrado na tabela de pagamentos?
Resposta: Na tabela de débitos constam apenas os débitos, quando é feito um pagamento o débito sai da tabela de débitos e vai pra tabela de pagamentos.
Tabela DÉBITOS CodigoEmpresa Data_Vencimento Ano PARCELA Valor_Debito 12 10/06/2018 2017 12 603.50 12 10/07/2018 2017 13 0.00 Tabela PAGAMENTOS CodigoEmpresa Data_Vencimento Ano PARCELA Valor_Pagamento 12 10/01/2018 2017 7 497.00 12 10/02/2018 2017 8 532.50 12 10/03/2018 2017 9 449.67 12 10/04/2018 2017 10 461.50 12 10/05/2018 2017 11 461.50
(B) Supondo que um cliente adquira o produto X, para pagar em 3 parcelas; o que é registrado nas tabelas DEBITOS e PAGAMENTOS:
- no momento da compra?
- no momento do pagamento da primeira parcela?
- se a segunda parcela não for paga até a data de vencimento?
- quando a segunda parcela, que estava atrasada, é paga?
Resposta: Todos os débitos ficam na tabela de débitos até serem pagos. Cada registro da tabela de débitos é uma parcela
(C) À medida que você fornece detalhes estou ampliando o código #1 postado lá no alto, ok?
Resposta: Perfeito!! Muito, muito obrigada!
(D) Qual o número aproximado de linhas da tabela DEBITOS para o período de 2014 a 2017?
Resposta: Aproximadamente mais de 600 mil linhas
- Editado Mariana.Sky sexta-feira, 15 de junho de 2018 12:37
-
-
-
Deleted
- Marcado como Resposta Mariana.Sky sexta-feira, 15 de junho de 2018 14:56
-