Usuário com melhor resposta
Comparação de indice do retorno select com uma variavel

Pergunta
-
Boa tarde,
Em uma consulta é possível comparar um dos índices de um retorno de um Select com uma variável ?
Por exemplo:
No Select retorna 3 linhas, e em cada linha contem uma coluna que se chama dia, resumindo, eu preciso utilizar o dia de cada coluna para somar a uma data, isso é possível?
Obrigado.
terça-feira, 20 de outubro de 2015 18:35
Respostas
-
Jefferson, dá uma olhada...
CREATE TABLE #TEMP ( DIA DATETIME ) DECLARE @DATA DATETIME SET @DATA = '2015-10-10' INSERT INTO #TEMP VALUES('2015-10-17') INSERT INTO #TEMP VALUES('2015-10-16') INSERT INTO #TEMP VALUES('2015-10-20') SELECT DATEADD(DAY,DAY(DIA),@DATA) --somados os dias do select com a data fixa FROM #TEMP DROP TABLE #TEMP
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
terça-feira, 20 de outubro de 2015 18:56 -
Vc pode usar uma CTE olha esse exemplo do Gustavo Maia
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Flávio Augusto Lacerda de FariasMVP terça-feira, 20 de outubro de 2015 23:06
- Marcado como Resposta Marcos SJ quarta-feira, 21 de outubro de 2015 17:43
- Não Marcado como Resposta Jefferson Meredija Mendes quarta-feira, 21 de outubro de 2015 22:38
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
terça-feira, 20 de outubro de 2015 21:41 -
Oi Jefferson,
Onde você citou array, você poderia usar uma tabela temporária para incluir os campos pgto_codigo, os dias e os dias de vencimento já calculados.
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
quinta-feira, 22 de outubro de 2015 23:41
Todas as Respostas
-
Vc pode colocar um exemplo ?
Essa data que vai ser somada é fixa ou variável ?
Ela vem por uma outra consulta ?
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"terça-feira, 20 de outubro de 2015 18:41 -
Que tipo de dado é essa coluna dia? datetime? int?terça-feira, 20 de outubro de 2015 18:45
-
Fiz um exemplo pequeno aqui !!!
Ele pode ir além, usando case e por ai vai, vai depender da sua necessidade !!!
CREATE TABLE #tmp ( id INT IDENTITY (1,1), DATA date ) INSERT #tmp (DATA ) VALUES ('2015-10-20') INSERT #tmp (DATA ) VALUES ('2015-10-20') INSERT #tmp (DATA ) VALUES ('2015-10-20') INSERT #tmp (DATA ) VALUES ('2015-10-20') SELECT * FROM #tmp DECLARE @variavel INT SET @variavel = 4 /*Quantidade de dias a ser somado*/ DECLARE @qtdias int SET @qtdias = 3 SELECT data , DATEADD(d, 5, data) FROM #tmp WHERE id = @variavel DROP TABLE #tmp
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"terça-feira, 20 de outubro de 2015 18:47 -
Jefferson, dá uma olhada...
CREATE TABLE #TEMP ( DIA DATETIME ) DECLARE @DATA DATETIME SET @DATA = '2015-10-10' INSERT INTO #TEMP VALUES('2015-10-17') INSERT INTO #TEMP VALUES('2015-10-16') INSERT INTO #TEMP VALUES('2015-10-20') SELECT DATEADD(DAY,DAY(DIA),@DATA) --somados os dias do select com a data fixa FROM #TEMP DROP TABLE #TEMP
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
terça-feira, 20 de outubro de 2015 18:56 -
Tenho um select que me retorna a quantidade de registros de acordo com a forma de pagamento:
>>> select (COUNT(venc_codigo)) from Financeiro.[VencimentosPagamento] where pgto_codigo = 1018
Nesse exemplo me retorna 3.
por outro lado tenho outro select parecido que retorna todos os registros da forma de pagamento em questão:
>>> select * from Financeiro.VencimentosPagamento where pgto_codigo=1018
Resultado do select:
venc_codigo|pgto_codigo|dias
1 | 20 | 1018 |30
2 | 21 | 1018 | 60
3 | 22 | 1018 | 90Também tenho um select que retorno em uma variável a data que o usuário cadastrou sendo da conta, assim a data muda de conta para conta e preciso para cada registro retornado na imagem inserir um titulo (parcela) em outra tabela contendo o respectivo valor de sua parcela e o dia de cada vencimento somado a data.
O resultado do select se refere a quantidade de vencimentos referente a forma de pagamento escolhida no cadastro de contas, ou seja, isso varia de acordo com a forma de pagamento escolhida pelo usuário do sistema.
segue a procedure desenvolvida até o momento:
create procedure spGeraTitulos
@conta int
as
begin
--variaveis
declare @pgto_codigo int, @valor decimal(18,2), @data date
declare @vencimentos int = 1, @pessoa int, @dataalteracao as date
declare @descricao varchar(100), @valorparcela decimal(18,2)
--trazer o valor, a forma de pagamento e a data da nota
SELECT @valor=cont_valor,@pgto_codigo=formapgto_codigo,@data=cont_datanota,
@pessoa=pes_codigo,@dataalteracao=cont_alteracao, @descricao=cont_descricao
FROM Financeiro.Contas where cont_codigo = @conta
declare @qtd int
--trazer a quantidade de vencimentos
select @qtd=(COUNT(venc_codigo)) from Financeiro.[VencimentosPagamento] where pgto_codigo = 1018
set @valorparcela=@valor/@qtd --divisao do valor cheio em parcelas
WHILE (@vencimentos <= @qtd)
BEGIN
insert into Financeiro.Titulos
(cont_codigo,tit_descricao,tit_valorparcela,tit_datavencimento,tit_data,pes_codigo,sit_codigo,sta_codigo)
values(@conta,@descricao+', parcela '+ convert(varchar(20),@vencimentos),@valorparcela,@data,@pessoa,1,1);
set @vencimentos=@vencimentos+1;
END
END
exec spGeraTitulos 2- Editado Jefferson Meredija Mendes terça-feira, 20 de outubro de 2015 19:06
terça-feira, 20 de outubro de 2015 19:02 -
Tenho um select que me retorna a quantidade de registros de acordo com a forma de pagamento:
>>> select (COUNT(venc_codigo)) from Financeiro.[VencimentosPagamento] where pgto_codigo = 1018
Nesse exemplo me retorna 3.
por outro lado tenho outro select parecido que retorna todos os registros da forma de pagamento em questão:
>>> select * from Financeiro.VencimentosPagamento where pgto_codigo=1018
Resultado do select:
venc_codigo|pgto_codigo|dias
1 | 20 | 1018 |30
2 | 21 | 1018 | 60
3 | 22 | 1018 | 90Também tenho um select que retorno em uma variável a data que o usuário cadastrou sendo da conta, assim a data muda de conta para conta e preciso para cada registro retornado na imagem inserir um titulo (parcela) em outra tabela contendo o respectivo valor de sua parcela e o dia de cada vencimento somado a data.
O resultado do select se refere a quantidade de vencimentos referente a forma de pagamento escolhida no cadastro de contas, ou seja, isso varia de acordo com a forma de pagamento escolhida pelo usuário do sistema.
segue a procedure desenvolvida até o momento:
create procedure spGeraTitulos
@conta int
as
begin
--variaveis
declare @pgto_codigo int, @valor decimal(18,2), @data date
declare @vencimentos int = 1, @pessoa int, @dataalteracao as date
declare @descricao varchar(100), @valorparcela decimal(18,2)
--trazer o valor, a forma de pagamento e a data da nota
SELECT @valor=cont_valor,@pgto_codigo=formapgto_codigo,@data=cont_datanota,
@pessoa=pes_codigo,@dataalteracao=cont_alteracao, @descricao=cont_descricao
FROM Financeiro.Contas where cont_codigo = @conta
declare @qtd int
--trazer a quantidade de vencimentos
select @qtd=(COUNT(venc_codigo)) from Financeiro.[VencimentosPagamento] where pgto_codigo = 1018
set @valorparcela=@valor/@qtd --divisao do valor cheio em parcelas
WHILE (@vencimentos <= @qtd)
BEGIN
insert into Financeiro.Titulos
(cont_codigo,tit_descricao,tit_valorparcela,tit_datavencimento,tit_data,pes_codigo,sit_codigo,sta_codigo)
values(@conta,@descricao+', parcela '+ convert(varchar(20),@vencimentos),@valorparcela,@data,@pessoa,1,1);
set @vencimentos=@vencimentos+1;
END
END
exec spGeraTitulos 2
Blz, e o que vc quer exatamente ?
Somar a quantidade de dias da consulta: "select * from Financeiro.VencimentosPagamento where pgto_codigo=1018"?
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"terça-feira, 20 de outubro de 2015 19:11 -
Não exatamente,
Este select me retorna 3 linhas, sendo que cada linha tem que corresponder a um futuro insert na tabela de titulos a receber, sendo que em cada linha retornada existe a coluna "dia" que contem no exemplo com os valores em cada retorno (30 , 60 , 90), para cada dia desse eu somaria individualmente a uma data da conta que cadastrei, e com outros demais valores demais e faria um insert na tabela de titulos.
terça-feira, 20 de outubro de 2015 19:21 -
Não exatamente,
Este select me retorna 3 linhas, sendo que cada linha tem que corresponder a um futuro insert na tabela de titulos a receber, sendo que em cada linha retornada existe a coluna "dia" que contem no exemplo com os valores em cada retorno (30 , 60 , 90), para cada dia desse eu somaria individualmente a uma data da conta que cadastrei, e com outros demais valores demais e faria um insert na tabela de titulos.
Fiz um exemplo !!!!
Criei uma temporária para simular sua tabela com os dias, em seguida criei uma outra tabela onde tenho uma data, e atribui a uma variável o valor dessa data, lembrando que vc pode cruzar isso através de um id e etc...CREATE TABLE #tmp ( id INT, venc_codigo INT, pgto_codigo INT, dias int ) INSERT #tmp ( id, venc_codigo, pgto_codigo, dias ) VALUES (1,20,1018,30) INSERT #tmp ( id, venc_codigo, pgto_codigo, dias ) VALUES (2,21,1018,60) INSERT #tmp ( id, venc_codigo, pgto_codigo, dias ) VALUES (3,22,1018,90) CREATE TABLE #tmp2 ( DATA date ) INSERT #tmp2 ( DATA ) VALUES ('01/01/2015') DECLARE @data DATE SELECT @data = data FROM #tmp2 SELECT id,venc_codigo,pgto_codigo,dias,@data AS data_original,DATEADD(DAY,dias,@data) as data_alterada FROM #tmp
Copia e executa e veja o resultado
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Jefferson Meredija Mendes terça-feira, 20 de outubro de 2015 21:08
- Não Marcado como Resposta Jefferson Meredija Mendes terça-feira, 20 de outubro de 2015 21:08
- Marcado como Resposta Marcos SJ quarta-feira, 21 de outubro de 2015 17:43
- Não Marcado como Resposta Jefferson Meredija Mendes quarta-feira, 21 de outubro de 2015 22:37
terça-feira, 20 de outubro de 2015 19:39 -
O resultado em partes seria mais ou menos isso, porém a minha dificuldade é que eu tenho esse resultado que voce me passou em um select e a coluna dia que eu preciso pra manipular as datas e salvar em uma outra tabela referenciando de qual conta é.
talvez uma array pudesse guardar o pgto _codigo e os dias de 3 registros?
terça-feira, 20 de outubro de 2015 21:15 -
Vc pode usar uma CTE olha esse exemplo do Gustavo Maia
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Flávio Augusto Lacerda de FariasMVP terça-feira, 20 de outubro de 2015 23:06
- Marcado como Resposta Marcos SJ quarta-feira, 21 de outubro de 2015 17:43
- Não Marcado como Resposta Jefferson Meredija Mendes quarta-feira, 21 de outubro de 2015 22:38
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
terça-feira, 20 de outubro de 2015 21:41 -
Oi Jefferson,
Onde você citou array, você poderia usar uma tabela temporária para incluir os campos pgto_codigo, os dias e os dias de vencimento já calculados.
- Marcado como Resposta Marcos SJ terça-feira, 27 de outubro de 2015 13:17
quinta-feira, 22 de outubro de 2015 23:41 -
Bom dia,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
AtenciosamenteMarcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
terça-feira, 27 de outubro de 2015 13:16