Flavio Nascto Postado Novembro 11, 2009 Denunciar Share Postado Novembro 11, 2009 (editado) MestresBom dia..Pessoal ... preciso de ajuda..Eu tenho um campo de uma com diversas datas.. Preciso montar 4 parametros.1 - contendo a data de um certo select. . 'select data from aluno'2 - contendo o mes do item 13 - contendo o mes anterior (data) ao item 1, ou seja eu preciso colocar no parâmetro a data anterior.Obs, para cada mes eu só tenho apenas uma data registrada no banco, portanto nunca terei umas de um dia do mes registrado no banco.4 - Contendo o mes do item 3SEriam...DT_REL = MES_DT_REL =DT_REL_ANT =MES_DT_REL_ANT = Editado Novembro 11, 2009 por Flavio Nascto Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 11, 2009 Denunciar Share Postado Novembro 11, 2009 select data as DT_REL, Month(dns) as MES_DT_REL, DATEadd(Month, -1, dns) as DT_REL_ANT, (Month(dns))-1 as MES_DT_REL_ANT from alunoFaz o teste aí. Caso não seja isso, pode postar ai!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio Nascto Postado Novembro 12, 2009 Autor Denunciar Share Postado Novembro 12, 2009 Eu tenho um campo de uma TABELA com diversas datas.. Preciso montar 4 parametros.1 - contendo a data de um certo select. . 'select data from aluno'2 - contendo o mes do item 13 - contendo o mes anterior (data) ao item 1, ou seja eu preciso colocar no parâmetro a data anterior.Obs, para cada mes eu só tenho apenas uma data registrada no banco, portanto nunca terei umas de um dia do mes registrado no banco.4 - Contendo o mes do item 3Preciso do seguinte resultado DT_REL = MES_DT_REL =DT_REL_ANT =MES_DT_REL_ANT =Perceba que eu preciso dos resultados separado.O exemplo que você me enviou ta tudo junto... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 12, 2009 Denunciar Share Postado Novembro 12, 2009 você tendo o resultado junto, basta separar e vice-versa.JUNTO:select data as DT_REL, Month(dns) as MES_DT_REL, DATEadd(Month, -1, dns) as DT_REL_ANT, (Month(dns))-1 as MES_DT_REL_ANT from alunoSEPARADO:DT_REL = (select data as DT_REL from aluno)MES_DT_REL = (select Month(dns) as MES_DT_REL from aluno)DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from aluno)MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from aluno)OBS: se você criar uma varivável DT_REL, o select tem q retornar apenas 1 valor, ok?você pode passar os resultados juntos para o aplicativo, e nele separar também. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio Nascto Postado Novembro 17, 2009 Autor Denunciar Share Postado Novembro 17, 2009 FulvioNão funciona, vamos la..... vou postar tudo... se prefirir pode colar no query analyzer e testar..---- Vamos criar as tabelas e as informações da minha dúvida.CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE ANALISE(MES int)--------------- apenas para analisar os dados-------Select * from alunoSelect * from analise--DROP TABLE aluno--DROP TABLE ANALISE------------------------------------------------------- bom agora que criamos e populamos a tabela vamos a dúvida.---- Agora vamos ao que não esta funcionando ....DECLARE @DT_REL (10), @MES_DT_REL varchar(10), @DT_REL_ANT varchar(10), @MES_DT_REL_ANT varchar(4), @base varchar (1000)@base = 'analise'@DT_REL = (select data as DT_REL from aluno)@MES_DT_REL = (select Month(dns) as MES_DT_REL from aluno)@DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from aluno)@MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from aluno)Print @DT_RELPrint @MES_DT_RELPrint @DT_REL_ANTPrint @MES_DT_REL_ANT--- Eu preciso dar un insert into com o mes na tabela analise, porém,--- a premissa é resultado do parametro para incluir na tabela--- eis abaixo uma parte do que preciso realizarInsert into @base(mes) values (MES_DT_REL)Select top 10 @MES_DT_REL from @base Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 17, 2009 Denunciar Share Postado Novembro 17, 2009 Bom dia Flávio,Segue o script com as alterações. Coloca no Query Analyzer e vai rodando passo a passo pra entender. Se tiver alguma dúvida, posta aí...---- Vamos criar as tabelas e as informações da minha dúvida.CREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE dbo.ANALISE(MES int)--------------- apenas para analisar os dados-------Select * from alunoSelect * from analise--DROP TABLE aluno--DROP TABLE ANALISE------------------------------------------------------- bom agora que criamos e populamos a tabela vamos a dúvida.---- Agora vamos ao que não esta funcionando ....-- alterei os tipos das variáveisDECLARE @DT_REL datetime,@MES_DT_REL varchar(2),@DT_REL_ANT datetime,@MES_DT_REL_ANT varchar(2),-- como você declarou uma variável, você só poderá atribuir 1 valor à variável.... Por isso q coloquei top 1set @DT_REL = (select top 1 DT_REL from aluno)set @MES_DT_REL = (select top 1 Month(DT_REL) from aluno)set @DT_REL_ANT = (select top 1 DATEadd(Month, -1, DT_REL) from aluno)set @MES_DT_REL_ANT = (select top 1 (Month(DT_REL))-1 from aluno)-- o Print agora vai sair ok.Print @DT_RELPrint @MES_DT_RELPrint @DT_REL_ANTPrint @MES_DT_REL_ANT--- Eu preciso dar un insert into com o mes na tabela analise, porém,--- a premissa é resultado do parametro para incluir na tabela--- eis abaixo uma parte do que preciso realizar-- Assim não funcionaInsert into @base(mes) values (MES_DT_REL)Select top 10 @MES_DT_REL from @base-- você quer referenciar a tabela dinamicamente: passar o nome da tabela pela variável-- e acessa-la. Desta forma, o SQL não entende que dentro da variável contém o nome da tabela q pretende -- acessar. Ele espera o nome de uma tabela, não uma variável.-- Se você quiser fazer a inserção de todos os dados, você não precisará da criação de variáveis pra isso.-- Vou dar um exemplo abaixo utilizando a tabela q passou de exemplo.-- passei a declaração de variavel pra cá.declare @base varchar (1000)set @base = 'analise'-- você tem q montar o script se quiser passar o nome da tabela dinamicamente.Declare @Script varchar(100)set @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from aluno'-- Select pra saber como o script ficou.select @Script-- A inserção não será realizada de 1 registro, mas sim de todos os registros. Desta -- forma, não será necessário utilizar as variáveis declaradas no começo do script.-- Executa o script montado na variável.exec (@Script)-- Verifica os dados gravados.select * from analise Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio Nascto Postado Novembro 18, 2009 Autor Denunciar Share Postado Novembro 18, 2009 Fulvio...Ola bom dia....Entendi... mas continuo sem os parametros de mes...------------------------------------------------------------------------------------------------------- Vamos criar as tabelas e as informações da minha dúvida.CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE ANALISE(MES int)--------------- apenas para analisar os dados-------Select * from alunoSelect * from analiseDROP TABLE alunoDROP TABLE ANALISE------------------------------------------------------- bom agora que criamos e populamos a tabela vamoas a dúvida.---- Agora vamos ao que não esta funcionando ....DECLARE @DT_REL (10), @MES_DT_REL varchar(10), @DT_REL_ANT varchar(10), @MES_DT_REL_ANT varchar(4), @base varchar (1000), @base2 varchar (1000)@base = 'analise'@base2 = 'aluno'@DT_REL = (select data as DT_REL from @base2)@MES_DT_REL = (select Month(dns) as MES_DT_REL from @base2)@DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from @base2)@MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from Base2)Print @DT_RELPrint @MES_DT_RELPrint @DT_REL_ANTPrint @MES_DT_REL_ANTset @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''select @Scriptexec (@Script) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 18, 2009 Denunciar Share Postado Novembro 18, 2009 Boa tarde Flávio,O script q postou não irá rodar, pois está com erro nas sintaxes. Ex.:@base = 'analise' (errado)SET @base = 'analise' (certo)@MES_DT_REL = (select Month(dns) as MES_DT_REL from @base2) (errado)SET @MES_DT_REL = (select TOP 1 Month(dns) as MES_DT_REL from @base2) (certo)(a variável só pode receber 1 valor)A variável @Script não está declarada.Dá uma olhada no q passei pra você e faz as adaptações... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio Nascto Postado Novembro 18, 2009 Autor Denunciar Share Postado Novembro 18, 2009 Puts.. é mesmo...Fiz alguma mudanças mais ainda não funciona...CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE ANALISE(MES int)--------------- apenas para analisar os dados-------Select * from alunoSelect * from analiseDROP TABLE alunoDROP TABLE ANALISE------------------------------------------------------- bom agora que criamos e populamos a tabela vamoas a dúvida.---- Agora vamos ao que não esta funcionando ....DECLARE @DT_REL (10), @MES_DT_REL varchar(10), @DT_REL_ANT varchar(10), @MES_DT_REL_ANT varchar(4), @base varchar (1000), @base2 varchar (1000), @Script varchar (1000)SET @base = 'analise'SET @base2 = 'aluno'SET @MES_DT_REL = (select TOP 1 Month(DT_REL) as MES_DT_REL from @base2) -- aqui é a data de um campo@DT_REL_ANT = (select DATEadd(Month, -1, DT_REL) as DT_REL_ANT from @base2)@MES_DT_REL_ANT = (select (Month(DT_REL))-1 as MES_DT_REL_ANT from Base2)Print @DT_RELPrint @MES_DT_RELPrint @DT_REL_ANTPrint @MES_DT_REL_ANTset @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''select @Scriptexec (@Script) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 18, 2009 Denunciar Share Postado Novembro 18, 2009 Uma pergunta: você quer fazer todos os inserts ao mesmo tempo? Porque se for isso, não precisa delcarar as variváeis e setar o valor nelas.Fiz um novo script baseado no seu. Dá uma olhada:-- criei as tabelas. A tabela ANALISE coloquei uma coluna a maisCREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE ANALISE(MES int, MES_ANT int)-- verificaçãoSelect * from alunoSelect * from analise--- Declaração de variaviesDeclare @base varchar (1000),@base2 varchar (1000),@Script varchar (1000)SET @base = 'analise'SET @base2 = 'aluno'-- Inserção de todos os meses, MES e MES ANTERIOR, baseado na tabela ALUNO. OBS.: o selecet está com TOP 10set @Script = 'insert into ' + @base + ' (MES, MES_ANT) Select top 10 Month(DT_REL), Month(DT_REL_ANT) from ' + @base2 + ''select @Scriptexec (@Script) -- verificação dos dados.Select * from alunoSelect * from analiseSe não for isso, posta ai... :.) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Flavio Nascto Postado Novembro 19, 2009 Autor Denunciar Share Postado Novembro 19, 2009 Não Fulvio...Irei fazer varios inserts em várias tabelas, + diversos calculos com os parâmetros que informei.updates com esses parametros em outras tabelas, pegar resultado de desses updates, somar, contar... jogar o resultado em outra tabela.. etc....Exatamente como consta no exemplo que estamos falando .. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Novembro 19, 2009 Denunciar Share Postado Novembro 19, 2009 beleza... Então vamos voltar pro exemplo q me passou....Diz algumas alterações e comentários.CREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')CREATE TABLE dbo.ANALISE(MES int)--------------- apenas para analisar os dados-------Select * from alunoSelect * from analiseDROP TABLE alunoDROP TABLE ANALISE------------------------------------------------------- bom agora que criamos e populamos a tabela vamoas a dúvida.---- Agora vamos ao que não esta funcionando ....DECLARE @DT_REL datetime,@MES_DT_REL varchar(10),@DT_REL_ANT datetime,@MES_DT_REL_ANT varchar(4),@base varchar (1000),@base2 varchar (1000),@Script varchar (1000)SET @base = 'analise'SET @base2 = 'aluno'--SET @MES_DT_REL = (select TOP 1 Month(DT_REL) as MES_DT_REL from @base2) -- assim não funciona, pois o sql espera o nome da tabela, e não uma variávelset @Script = ('select TOP 1 Month(DT_REL) from ' + @base2)--set @MES_DT_REL = exec (@Script) -- assim também não funciona, pois não se consegue associar o comando de execução da string, pegando o resultado e atribuindo a uma variável-- você terá q criar uma temporária, jogar os dados do resultdo do EXEC na temporária e depois atribuir à variável.-- A temporária criada é em tempo de execução. Selecione todos os comandos e rode junto.declare @tmp table (mes int)insert into @tmpexec (@Script)set @MES_DT_REL = (select mes from @tmp)-- verifica o dado atribuido a variavel.select @MES_DT_REL-- Ai você faz pros outros casos...............................SET @DT_REL_ANT = (select DATEadd(Month, -1, DT_REL) as DT_REL_ANT from @base2)SET @MES_DT_REL_ANT = (select (Month(DT_REL))-1 as MES_DT_REL_ANT from Base2)Print @DT_RELPrint @MES_DT_RELPrint @DT_REL_ANTPrint @MES_DT_REL_ANTset @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''select @Scriptexec (@Script) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Flavio Nascto
Mestres
Bom dia..
Pessoal ... preciso de ajuda..
Eu tenho um campo de uma com diversas datas..
Preciso montar 4 parametros.
1 - contendo a data de um certo select. . 'select data from aluno'
2 - contendo o mes do item 1
3 - contendo o mes anterior (data) ao item 1, ou seja eu preciso colocar no parâmetro a data anterior.
Obs, para cada mes eu só tenho apenas uma data registrada no banco, portanto nunca terei umas de um dia do mes registrado no banco.
4 - Contendo o mes do item 3
SEriam...
DT_REL =
MES_DT_REL =
DT_REL_ANT =
MES_DT_REL_ANT =
Editado por Flavio NasctoLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.