none
Connect by no SQL Express RRS feed

  • Pergunta

  • CREATE TABLE usu_tctrpar
    (
    usu_codemp SMALLINT,
    usu_codfil SMALLINT,
    usu_codcre VARCHAR (8),
    usu_seqapt INT,
    usu_codmtv VARCHAR (4),
    usu_dtinpa DATETIME,
    usu_hrinpa INT,
    usu_dtfipa DATETIME,
    usu_hrfipa INT,
    usu_sitpar VARCHAR (1)
    )


    INSERT INTO dbo.usu_tctrpar (usu_codemp, usu_codfil, usu_codcre, usu_seqapt, usu_codmtv, usu_dtinpa, usu_hrinpa, usu_dtfipa, usu_hrfipa, usu_sitpar)
    VALUES (1, 1, '902', 82, '901', '08/12/2017', 977, '11/12/2017', 501, '')
    Go

    o resultado que traz é:

    usu_dtinpa usu_dtfipa

    08/12/2017 11/12/2017

    mas precisava que viesse da seguinte forma

    usu_dtinpa usu_dtfipa

    08/12/2017 08/12/2017

    09/12/2017 09/12/2017

    10/12/2017 10/12/2017

    11/12/2017 11/12/2017

    no oracle utilizava o connect by level, no entanto estou usando sql server e não estou conseguindo encontrar uma forma para trazer em linha as quantidades de dias, pois preciso saber a quantidade de minutos por dia que teve parada de produção.

    segunda-feira, 11 de dezembro de 2017 17:27

Respostas

  • Rodrigo,

    Já tentou utilizar as funções Lad e Lead, veja se este exemplo pode te ajudar:

    -- Declarando a variável do tipo Table --
    DECLARE @Valores TABLE 
     (Data DATE, 
     Valor DECIMAL(4,2))
    
    
     -- Inserindo valores na variável --
    INSERT INTO @Valores 
    VALUES ('2012-04-01',0.55),
    ('2012-05-01',4.07), ('2012-06-01',10.22),
    ('2012-07-01',2.59), ('2012-08-01',5.29)
    
    -- Utilizando as Windows Function Lag e Lead --
    SELECT Data, Valor,
    LAG(Valor) OVER (ORDER BY Data) As 'Posição Inicial',
    LEAD(Valor) OVER (ORDER BY Data) As 'Posição Posterior',
    LAG(Valor,2) OVER (ORDER BY Data) As 'Posição Intermediária',
    LEAD(Valor,3) OVER (ORDER BY Data) As 'Posição Final'
    FROM @Valores
    


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 11 de dezembro de 2017 22:42

Todas as Respostas

  • Deleted
    segunda-feira, 11 de dezembro de 2017 19:09
  • Rodrigo,

    Já tentou utilizar as funções Lad e Lead, veja se este exemplo pode te ajudar:

    -- Declarando a variável do tipo Table --
    DECLARE @Valores TABLE 
     (Data DATE, 
     Valor DECIMAL(4,2))
    
    
     -- Inserindo valores na variável --
    INSERT INTO @Valores 
    VALUES ('2012-04-01',0.55),
    ('2012-05-01',4.07), ('2012-06-01',10.22),
    ('2012-07-01',2.59), ('2012-08-01',5.29)
    
    -- Utilizando as Windows Function Lag e Lead --
    SELECT Data, Valor,
    LAG(Valor) OVER (ORDER BY Data) As 'Posição Inicial',
    LEAD(Valor) OVER (ORDER BY Data) As 'Posição Posterior',
    LAG(Valor,2) OVER (ORDER BY Data) As 'Posição Intermediária',
    LEAD(Valor,3) OVER (ORDER BY Data) As 'Posição Final'
    FROM @Valores
    


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 11 de dezembro de 2017 22:42
  • Bom dia,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    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.

    segunda-feira, 18 de dezembro de 2017 13:14
    Moderador