Usuário com melhor resposta
SQL - Mostrar data atual e data anterior (D-1) na mesma coluna

Pergunta
-
Pessoal boa noite,
No SQL Server estou tentando mostrar na mesma coluna a data atual e a data anterior sendo d-1
Porém eu não estou conseguindo juntar as duas datas para aparecer num mesmo relatorio, na mesma coluna mas em linhas.
Podem dar um help?
Segue pedaço do codigo.
DECLARE @Hoje DATE
Declare @Hoje1 DATE
Declare @DataInicio DATE
Declare @DataFim DATE
SET @Hoje = DATEADD (DD,0,GETDATE())
SET @Hoje1 = DATEADD (DD,-1,GETDATE())
DECLARE @CriterioArquivo AS TABLE (Id INT IDENTITY(1,1),
GrupoQuery INT,
PrefixoArquivo VARCHAR(255),
TipoArquivo CHAR(2),
QtdeDRT INT,
DataInicio DATE,
DataFim DATE)
SELECT @DataInicio = MIN(dtt_data_captura),
@DataFim = MAX(dtt_data_captura)
FROM (
SELECT MAX([dtt_data_captura]) AS dtt_data_captura
FROM [tb_arquivo_processado]
WHERE [fk_int_status] in ('2', '4')
AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%'
) X
INSERT INTO @CriterioArquivo VALUES
(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Hoje, GETDATE()),
(2, 'Abhi_RT_G3_30_%', 'RT', 5, @Hoje, GETDATE()),
(3, 'Abhi_RT_OC_30_%', 'RT', 5, @Hoje, GETDATE()),
(2, 'Abhi_RT_Ext.1_%', 'RT', 5, @DataInicio, @DataFim),
(2, '%G3_OW_BUSCA_HORA_%', 'OW', 5, @Hoje, GETDATE()),
(2, '%G3_OW_ATM_CKS%', 'OW', 5, @Hoje, GETDATE()),
(2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Hoje, GETDATE()),
(1, '%JJ_OW_Super_Competitive%', 'OW', 5, @Hoje, GETDATE()),
(4, '%AZUL_RT_AD_30_%', 'RT', 5, @Hoje, GETDATE()),
(4, '%AZUL_RT_AD_Ext.1_%', 'RT', 5, @Hoje, GETDATE()),
(3, '%Abhi_RT_OC_7_', 'RT', 5, @Hoje, GETDATE()),
(1, '%Abhi_RT_JJ_7_%', 'RT', 5, @Hoje, GETDATE()),
(1, '%JJ_OW_VOLTA%', 'OW', 5, @Hoje, GETDATE()),
(2, '%G3_OW_VOLTA%', 'OW', 5, @Hoje, GETDATE()),
(1, '%Abhi_RT_JJ_Ext.1_%', 'RT', 5, @Hoje, GETDATE())BEGIN TRY DROP TABLE #PreCriterioArquivo END TRY BEGIN CATCH END CATCH
SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
INTO #PreCriterioArquivo
FROM @CriterioArquivo CA
INNER JOIN [QL2].[dbo].[tb_arquivo_processado] AP ON AP.dtt_data_captura >= DataInicio AND
AP.dtt_data_captura <= DataFim AND
AP.vch_nome_arquivo LIKE CA.PrefixoArquivo AND
AP.fk_int_status IN (2, 4)Preciso que a consulta traga dados da data atual e da data do dia anteior, ou até 3 dias atrás.
Em linhas
Exemplo
Col 1 Col 2 Data
AA 1 16/02/2017 Atual
BB 2 16/02/2017 Atual
CC 3 16/02/2017 Atual
AA 1 15/02/2017 D-1
BB 2 15/02/2017 D-1
CC 3 15/02/2017 D-1
Muito obrigada
- Editado Thaís Sakamoto quinta-feira, 16 de fevereiro de 2017 13:54
Respostas
-
Deleted
- Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
quinta-feira, 16 de fevereiro de 2017 18:07 -
Boa noite,
Thaís, pelo teste rápido que fiz com o script abaixo acredito que deveria funcionar.
Experimente fazer uns testes:
declare @tb_arquivo_processado table ( pk_int_arquivo_processado int identity(1, 1), vch_nome_arquivo varchar(255), dtt_data_captura date, fk_int_status int ); insert into @tb_arquivo_processado (vch_nome_arquivo, dtt_data_captura, fk_int_status) values ('Abhi_RT_JJ_14_ABC', '20170216', 2), ('Abhi_RT_JJ_14_DEF', '20170215', 4); DECLARE @Hoje DATE Declare @Ontem DATE Declare @DataInicio DATE Declare @DataFim DATE SET @Hoje = DATEADD (DD,0,GETDATE()) SET @Ontem = DATEADD (DD,-1,GETDATE()) DECLARE @CriterioArquivo AS TABLE (Id INT IDENTITY(1,1), GrupoQuery INT, PrefixoArquivo VARCHAR(255), TipoArquivo CHAR(2), QtdeDRT INT, DataInicio DATE, DataFim DATE) SELECT @DataInicio = MIN(dtt_data_captura), @DataFim = MAX(dtt_data_captura) FROM @tb_arquivo_processado WHERE [fk_int_status] in ('2', '4') AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%'; INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo, QtdeDRT, DataInicio, DataFim) VALUES (1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Ontem, @Hoje), (2, 'Abhi_RT_G3_30_%', 'RT', 5, @Ontem, @Hoje), (3, 'Abhi_RT_OC_30_%', 'RT', 5, @Ontem, @Hoje), (2, 'Abhi_RT_Ext.1_%', 'RT', 5, @DataInicio, @DataFim), (2, '%G3_OW_BUSCA_HORA_%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_ATM_CKS%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje), (1, '%JJ_OW_Super_Competitive%', 'OW', 5, @Ontem, @Hoje), (4, '%AZUL_RT_AD_30_%', 'RT', 5, @Ontem, @Hoje), (4, '%AZUL_RT_AD_Ext.1_%', 'RT', 5, @Ontem, @Hoje), (3, '%Abhi_RT_OC_7_', 'RT', 5, @Ontem, @Hoje), (1, '%Abhi_RT_JJ_7_%', 'RT', 5, @Ontem, @Hoje), (1, '%JJ_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje), (1, '%Abhi_RT_JJ_Ext.1_%', 'RT', 5, @Ontem, @Hoje) SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, AP.dtt_data_captura, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado] -- INTO #PreCriterioArquivo FROM @CriterioArquivo CA INNER JOIN @tb_arquivo_processado AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo where AP.dtt_data_captura between CA.DataInicio and CA.DataFim AND AP.fk_int_status IN (2, 4);
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
-
Deleted
- Sugerido como Resposta Robson William Silva segunda-feira, 20 de fevereiro de 2017 12:47
- Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
sexta-feira, 17 de fevereiro de 2017 10:52 -
Meus caros,
Consegui solucionar o problema finalmente
Eu agradeço muito a ajuda de todos
Criei um insert para cada
INSERT INTO @CriterioArquivo VALUES
(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Ontem, GETDATE()),(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Hoje, GETDATE())
Obrigada
- Marcado como Resposta Thaís Sakamoto quarta-feira, 22 de fevereiro de 2017 17:28
Todas as Respostas
-
Olá! Você pode concatenar as duas datas para ficarem na mesma coluna, segue exemplo:
DECLARE @Hoje DATETIME DECLARE @Ontem DATETIME SET @Hoje = GETDATE() SET @Ontem = DATEADD(DAY, -1, @Hoje) SELECT REPLACE(CONVERT(NVARCHAR, @Ontem, 106), ' ', '/') + ' - ' + REPLACE(CONVERT(NVARCHAR, @Hoje, 106), ' ', '/')
João Paulo Gomes
- Editado John Owl quarta-feira, 15 de fevereiro de 2017 20:58
-
Pessoal boa noite,
No SQL Server estou tentando mostrar na mesma coluna a data atual e a data anterior sendo d-1
Porém eu não estou conseguindo juntar as duas datas para aparecer num mesmo relatorio, na mesma coluna.
De forma simples e objetiva vc pode usar a função CONCAT
seque o Exemplo:
DECLARE @Hoje DATE
Declare @Ontem DATE
Declare @DataInicio DATE
Declare @Campo VARCHAR(30)
SET @Hoje = DATEADD (DD,0,GETDATE())
SELECT @Hoje
SET @Ontem = DATEADD (DD,-1,GETDATE())
SELECT @Ontem
SET @Campo =CONCAT(@Ontem,' - ',@Hoje);
SELECT @Campo
Por favor, marque-o como respondidas se está respondeu a sua pergunta
ou marcá-lo como útil se está ajudou a resolver o seu problema
Wesley Neves
MTA-Database Fundamentals
Analista Desenvolvedor.NET
- Editado Wesley Neves quinta-feira, 16 de fevereiro de 2017 10:43 Correção
-
Acho que não me expressei direito.
Preciso que a consulta traga dados da data atual e da data do dia anteior, ou até 3 dias atrás.
Em linhas
Exemplo
Col 1 Col 2 Data
AA 1 16/02/2017 Atual
BB 2 16/02/2017 Atual
CC 3 16/02/2017 Atual
AA 1 15/02/2017 D-1
BB 2 15/02/2017 D-1
CC 3 15/02/2017 D-1
Muito obrigada
-
Boa tarde,
Thaís, experimente utilizar as variáveis @Hoje1 e @Hoje no Insert para ver se é obtido o resultado esperado. Ex:
INSERT INTO @CriterioArquivo VALUES (1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Hoje1, @Hoje)
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
-
apresenta o erro novamente
Msg 8101, Level 16, State 1, Line 2
An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON.- Editado Thaís Sakamoto quinta-feira, 16 de fevereiro de 2017 16:58
-
Olá José
Agradeço muito sua ajuda
Segui as modificações. Porem minha consulta ainda resulta somente dados da data atual.
BEGIN TRY DROP TABLE #PreCriterioArquivo END TRY BEGIN CATCH END CATCH
SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado]
INTO #PreCriterioArquivo
FROM @CriterioArquivo CA
INNER JOIN [QL2].[dbo].[tb_arquivo_processado] AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo
where AP.dtt_data_captura between CA.DataInicio and CA.DataFim
AND AP.fk_int_status IN (2, 4);
DECLARE @Hoje DATE
Declare @Ontem DATE
Declare @DataInicio DATE
Declare @DataFim DATE
Declare @Tipo int
Declare @Valor decimal(5,2)
Set @Tipo = 1
Set @Valor = 20.00
SET @Hoje = DATEADD (DD,0,GETDATE())
SET @Ontem = DATEADD (DD,-1,GETDATE())
DECLARE @CriterioArquivo AS TABLE (Id INT IDENTITY(1,1),
GrupoQuery INT,
PrefixoArquivo VARCHAR(255),
TipoArquivo CHAR(2),
QtdeDRT INT,
DataInicio DATE,
DataFim DATE)
SELECT @DataInicio = MIN(dtt_data_captura),
@DataFim = MAX(dtt_data_captura)
FROM [tb_arquivo_processado]
WHERE [fk_int_status] in ('2', '4')
AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%';
INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo,
QtdeDRT, DataInicio, DataFim) VALUES
(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Ontem, @Hoje),
(2, 'Abhi_RT_G3_30_%', 'RT', 5, @Ontem, @Hoje),
(3, 'Abhi_RT_OC_30_%', 'RT', 5, @Ontem, @Hoje),
(2, 'Abhi_RT_Ext.1_%', 'RT', 5, @DataInicio, @DataFim),
(2, '%G3_OW_BUSCA_HORA_%', 'OW', 5, @Ontem, @Hoje),
(2, '%G3_OW_ATM_CKS%', 'OW', 5, @Ontem, @Hoje),
(2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje),
(1, '%JJ_OW_Super_Competitive%', 'OW', 5, @Ontem, @Hoje),
(4, '%AZUL_RT_AD_30_%', 'RT', 5, @Ontem, @Hoje),
(4, '%AZUL_RT_AD_Ext.1_%', 'RT', 5, @Ontem, @Hoje),
(3, '%Abhi_RT_OC_7_', 'RT', 5, @Ontem, @Hoje),
(1, '%Abhi_RT_JJ_7_%', 'RT', 5, @Ontem, @Hoje),
(1, '%JJ_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje),
(2, '%G3_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje),
(1, '%Abhi_RT_JJ_Ext.1_%', 'RT', 5, @Ontem, @Hoje)Obrigada
-
Boa noite,
Thaís, pelo teste rápido que fiz com o script abaixo acredito que deveria funcionar.
Experimente fazer uns testes:
declare @tb_arquivo_processado table ( pk_int_arquivo_processado int identity(1, 1), vch_nome_arquivo varchar(255), dtt_data_captura date, fk_int_status int ); insert into @tb_arquivo_processado (vch_nome_arquivo, dtt_data_captura, fk_int_status) values ('Abhi_RT_JJ_14_ABC', '20170216', 2), ('Abhi_RT_JJ_14_DEF', '20170215', 4); DECLARE @Hoje DATE Declare @Ontem DATE Declare @DataInicio DATE Declare @DataFim DATE SET @Hoje = DATEADD (DD,0,GETDATE()) SET @Ontem = DATEADD (DD,-1,GETDATE()) DECLARE @CriterioArquivo AS TABLE (Id INT IDENTITY(1,1), GrupoQuery INT, PrefixoArquivo VARCHAR(255), TipoArquivo CHAR(2), QtdeDRT INT, DataInicio DATE, DataFim DATE) SELECT @DataInicio = MIN(dtt_data_captura), @DataFim = MAX(dtt_data_captura) FROM @tb_arquivo_processado WHERE [fk_int_status] in ('2', '4') AND [vch_nome_arquivo] like 'Abhi_RT_Ext.1_%'; INSERT INTO @CriterioArquivo(GrupoQuery, PrefixoArquivo, TipoArquivo, QtdeDRT, DataInicio, DataFim) VALUES (1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Ontem, @Hoje), (2, 'Abhi_RT_G3_30_%', 'RT', 5, @Ontem, @Hoje), (3, 'Abhi_RT_OC_30_%', 'RT', 5, @Ontem, @Hoje), (2, 'Abhi_RT_Ext.1_%', 'RT', 5, @DataInicio, @DataFim), (2, '%G3_OW_BUSCA_HORA_%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_ATM_CKS%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_Super_Compet_Business%', 'OW', 5, @Ontem, @Hoje), (1, '%JJ_OW_Super_Competitive%', 'OW', 5, @Ontem, @Hoje), (4, '%AZUL_RT_AD_30_%', 'RT', 5, @Ontem, @Hoje), (4, '%AZUL_RT_AD_Ext.1_%', 'RT', 5, @Ontem, @Hoje), (3, '%Abhi_RT_OC_7_', 'RT', 5, @Ontem, @Hoje), (1, '%Abhi_RT_JJ_7_%', 'RT', 5, @Ontem, @Hoje), (1, '%JJ_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje), (2, '%G3_OW_VOLTA%', 'OW', 5, @Ontem, @Hoje), (1, '%Abhi_RT_JJ_Ext.1_%', 'RT', 5, @Ontem, @Hoje) SELECT CA.Id, CA.GrupoQuery, AP.vch_nome_arquivo, AP.dtt_data_captura, CA.TipoArquivo, CA.QtdeDRT, CA.DataInicio, CA.DataFim, AP.[pk_int_arquivo_processado] -- INTO #PreCriterioArquivo FROM @CriterioArquivo CA INNER JOIN @tb_arquivo_processado AP on AP.vch_nome_arquivo LIKE CA.PrefixoArquivo where AP.dtt_data_captura between CA.DataInicio and CA.DataFim AND AP.fk_int_status IN (2, 4);
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Thaís Sakamoto segunda-feira, 20 de fevereiro de 2017 17:57
-
Bom dia Thaís,
Conseguiu resolver o problema?
Atenciosamente,
Robson William Silva
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é 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.
-
Boa tarde,
No script que sugeri acima, basicamente só troquei a tabela do BD por uma variável de tabela para facilitar os testes.
Não sei se você chegou a executar o script, mas se executar (adaptando as datas utilizadas no Insert na variável de tabela) perceberá que o script vai retornar as linhas com o dia atual e com o dia anterior.
Caso você não consiga identificar o problema, acho que seria melhor você postar alguns Inserts na variável de tabela com outros dados, bem como devidos ajustes na variável de tabela para que fique semelhante a sua tabela no BD para demonstrar o problema que está ocorrendo.
Assinatura: http://www.imoveisemexposicao.com.br
-
Meus caros,
Consegui solucionar o problema finalmente
Eu agradeço muito a ajuda de todos
Criei um insert para cada
INSERT INTO @CriterioArquivo VALUES
(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Ontem, GETDATE()),(1, 'Abhi_RT_JJ_14_%', 'RT', 5, @Hoje, GETDATE())
Obrigada
- Marcado como Resposta Thaís Sakamoto quarta-feira, 22 de fevereiro de 2017 17:28