none
While, Case ou If para copiar o resultado do próximo, colar no atual quando for Null RRS feed

  • Pergunta

  • Boa tarde 

    Pessoal tenho uma query que tras o seguinte resultado:

    Como podem observar para flightnumber(2420) a coluna class (A,B,C,D,E,F,G)obtem resultados das colunas NDO(NDO0, NDO1, NDO2 e etc)

    No proximo flightnumber(2463) a coluna class (A,B,C,D,E,F,G)obtem resultados das colunas NDO(NDO0, NDO1, NDO2 e etc) porém todos Nulos (NULL)

    Preciso inserir algo do tipo:

    Quando os campos de NDO forem NULL copiar os campos sempre do próximo 'flightnumber'.

    Neste caso o proximo flightnumber é 2487

    Algo do tipo 

    Case NDO1 When 'NULL' then next < FlightNumber
      else ' ' 
      end 

    Alguém pode me ajudar a melhorar o código dentro da lógica?

    Obs. Sempre haverá um próximo flightnumber, e tem que ser sempre o próximo e não o anterior. 

    O flightnumber não é sequencial, mas o próximo é sempre crescente (2463 < 2487). 

    Obrigada




    segunda-feira, 12 de junho de 2017 19:31

Respostas

  • veja se deu certo

    ;
    WITH    Dados
              AS ( SELECT   T.LegOrigin ,
                            T.LegDestination ,
                            T.FlightNumber ,
                            [NextFlightNumber] = DENSE_RANK() OVER ( PARTITION  BY T.LegOrigin ORDER BY T.FlightNumber ) ,
                            T.DepartureDate ,
                            T.Class ,
                            T.NDO0 ,
                            T.NDO1 ,
                            T.NDO2 ,
                            T.NDO3 ,
                            T.NDO4 ,
                            T.NDO5 ,
                            T.NDO6 ,
                            T.NDO7
    --T.NDO8,
    --T.NDO9,
    --T.NDO10 
                   FROM     ##amostraAUH AS T
                 )
        SELECT  R.LegOrigin ,
                R.LegDestination ,
                R.FlightNumber ,
                R.NextFlightNumber ,
                R.DepartureDate ,
                R.Class ,
                NDO0 = IIF(R.NDO0 IS NULL, ( SELECT TOP 1
                                                    T.NDO0
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO0) ,
                NDO1 = IIF(R.NDO1 IS NULL, ( SELECT TOP 1
                                                    T.NDO1
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO1) ,
                NDO2 = IIF(R.NDO2 IS NULL, ( SELECT TOP 1
                                                    T.NDO2
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO2) ,
                NDO3 = IIF(R.NDO3 IS NULL, ( SELECT TOP 1
                                                    T.NDO3
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO3) ,
                NDO4 = IIF(R.NDO4 IS NULL, ( SELECT TOP 1
                                                    T.NDO4
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO4) ,
                NDO5 = IIF(R.NDO5 IS NULL, ( SELECT TOP 1
                                                    T.NDO5
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO5) ,
                NDO6 = IIF(R.NDO6 IS NULL, ( SELECT TOP 1
                                                    T.NDO6
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO6) ,
                NDO7 = IIF(R.NDO7 IS NULL, ( SELECT TOP 1
                                                    T.NDO7
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO7)
        FROM    Dados R;

    outra coisa qual e a versão do seu sql ??


    Wesley Neves

    • Marcado como Resposta Guilherme Macedo S segunda-feira, 19 de junho de 2017 13:06
    • Não Marcado como Resposta Thaís Sakamoto segunda-feira, 19 de junho de 2017 14:36
    • Marcado como Resposta Thaís Sakamoto segunda-feira, 19 de junho de 2017 14:52
    sexta-feira, 16 de junho de 2017 19:00

Todas as Respostas

  • Boa tarde 

    Pessoal tenho uma query que tras o seguinte resultado:

    Como podem observar para flightnumber(2420) a coluna class (A,B,C,D,E,F,G)obtem resultados das colunas NDO(NDO0, NDO1, NDO2 e etc)

    No proximo flightnumber(2463) a coluna class (A,B,C,D,E,F,G)obtem resultados das colunas NDO(NDO0, NDO1, NDO2 e etc) porém todos Nulos (NULL)

    Preciso inserir algo do tipo:

    Quando os campos de NDO forem NULL copiar os campos sempre do próximo 'flightnumber'.

    Neste caso o proximo flightnumber é 2487

    Algo do tipo 

    Case NDO1 When 'NULL' then next < FlightNumber
      else ' ' 
      end 

    Alguém pode me ajudar a melhorar o código dentro da lógica?

    Obs. Sempre haverá um próximo flightnumber, e tem que ser sempre o próximo e não o anterior. 

    O flightnumber não é sequencial, mas o próximo é sempre crescente (2463 < 2487). 

    Obrigada




    Oi pessoal bom dia, eu ainda estou procurando ajuda, quero que uma função procure automaticamente a class no próximo vôo (que sempre vem em seguida). Tipo um vlookup que procure o valor do NDO e da class (sempre do próximo flightnumber) mas somente se for null. Eu ainda estou tentando colocar a lógica em prática. 

    Então no flight 4046 na class A, no NDO0 é null

    Ele deve trazer o resultado 123 da class A, do NDO0 mas do próximo flight que é 4174

    terça-feira, 13 de junho de 2017 11:28
  • Bom dia, Thaís Sakamoto

    Tudo bem?

    Você quer fazer tudo isso em uma query? Isso?
    terça-feira, 13 de junho de 2017 12:38
  • Pelo que eu entendi vc quer replicar os dados do próximo flightnumber quando o campos forem nulos, 

    fiz um exemplo com seus dados de  amostra

    DECLARE @Tabela TABLE
        (
          LegLogin VARCHAR(3) DEFAULT ( 'VCP' ) ,
          LegDestino VARCHAR(3) DEFAULT ( 'CNF' ) ,
          flightnumber INT DEFAULT ( 2420 ) ,
          DepartamentoData DATETIME DEFAULT ( DATEFROMPARTS(2017, 1, 13) ) ,
          Class CHAR(1) ,
          NDO0 INT NULL ,
          NDO1 INT NULL ,
          NDO2 INT NULL ,
          NDO3 INT NULL ,
          NDO4 INT NULL ,
          NDO5 INT NULL ,
          NDO6 INT NULL ,
          NDO7 INT NULL
        );
    
    INSERT  INTO @Tabela
    VALUES 
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'A', 125, 125,   127,  128,  129,  130,  131,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'B', 125, 125,   127,  128,  129,  130,  131,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'C', 118, 118,   118,  118,  118,  118,  118,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'D', 118, 118,   118,  118,  118,  118,  118,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'E', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'F', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'G', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,2463,	 DEFAULT, 'A', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'B', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'C', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'D', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'E', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'F', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'G', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'A', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'B', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'C', 118, 118,   118, 118,  118, 118,   118,118 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'D', 118, 118,   118, 118,  118, 118,   118,118 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'E', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'F', 125, 125,   127, 122,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'G', 125, 125,   114, 109,  116, 130,   130,130 );
    
    
    
     WITH Dados AS (
     SELECT T.LegLogin ,
            T.LegDestino ,
            T.flightnumber ,
    		Proximoflightnumber = DENSE_RANK() OVER(PARTITION BY T.LegLogin ORDER BY T.flightnumber),
            T.DepartamentoData ,
            T.Class ,
            T.NDO0 ,
            T.NDO1 ,
            T.NDO2 ,
            T.NDO3 ,
            T.NDO4 ,
            T.NDO5 ,
            T.NDO6 ,
            T.NDO7 FROM @Tabela AS T
     )
     
     SELECT R.LegLogin ,
            R.LegDestino ,
            R.flightnumber ,
            R.Proximoflightnumber ,
            R.DepartamentoData ,
            R.Class ,
            NDO0 = IIF(R.NDO0  IS NULL ,( SELECT TOP 1 T.NDO0 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO0),
            NDO1 = IIF(R.NDO1  IS NULL ,( SELECT TOP 1 T.NDO1 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO1),
            NDO2 = IIF(R.NDO2  IS NULL ,( SELECT TOP 1 T.NDO2 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO2),
            NDO3 = IIF(R.NDO3  IS NULL ,( SELECT TOP 1 T.NDO3 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO3),
            NDO4 = IIF(R.NDO4  IS NULL ,( SELECT TOP 1 T.NDO4 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO4),
            NDO5 = IIF(R.NDO5  IS NULL ,( SELECT TOP 1 T.NDO5 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO5),
            NDO6 = IIF(R.NDO6  IS NULL ,( SELECT TOP 1 T.NDO6 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO6),
            NDO7 = IIF(R.NDO7  IS NULL ,( SELECT TOP 1 T.NDO7 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO7)
    		 FROM Dados R
     

    O resultado foi o sequinte:

    Acredito que seja isso

    Wesley Neves
    Brasilia-DF
    MTA-SQL Server
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves

    terça-feira, 13 de junho de 2017 12:59
  • Pelo que eu entendi vc quer replicar os dados do próximo flightnumber quando o campos forem nulos, 

    fiz um exemplo com seus dados de  amostra

    DECLARE @Tabela TABLE
        (
          LegLogin VARCHAR(3) DEFAULT ( 'VCP' ) ,
          LegDestino VARCHAR(3) DEFAULT ( 'CNF' ) ,
          flightnumber INT DEFAULT ( 2420 ) ,
          DepartamentoData DATETIME DEFAULT ( DATEFROMPARTS(2017, 1, 13) ) ,
          Class CHAR(1) ,
          NDO0 INT NULL ,
          NDO1 INT NULL ,
          NDO2 INT NULL ,
          NDO3 INT NULL ,
          NDO4 INT NULL ,
          NDO5 INT NULL ,
          NDO6 INT NULL ,
          NDO7 INT NULL
        );
    
    INSERT  INTO @Tabela
    VALUES 
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'A', 125, 125,   127,  128,  129,  130,  131,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'B', 125, 125,   127,  128,  129,  130,  131,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'C', 118, 118,   118,  118,  118,  118,  118,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'D', 118, 118,   118,  118,  118,  118,  118,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'E', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'F', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,DEFAULT, DEFAULT, 'G', 125, 125,   127,  128,  129,  130,  130,  1 ),
     ( DEFAULT, DEFAULT,2463,	 DEFAULT, 'A', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'B', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'C', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'D', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'E', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'F', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2463,    DEFAULT, 'G', NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL ),
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'A', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'B', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'C', 118, 118,   118, 118,  118, 118,   118,118 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'D', 118, 118,   118, 118,  118, 118,   118,118 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'E', 125, 125,   127, 128,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'F', 125, 125,   127, 122,  129, 130,   130,130 ), 
     ( DEFAULT, DEFAULT,2487,    DEFAULT, 'G', 125, 125,   114, 109,  116, 130,   130,130 );
    
    
    
     WITH Dados AS (
     SELECT T.LegLogin ,
            T.LegDestino ,
            T.flightnumber ,
    		Proximoflightnumber = DENSE_RANK() OVER(PARTITION BY T.LegLogin ORDER BY T.flightnumber),
            T.DepartamentoData ,
            T.Class ,
            T.NDO0 ,
            T.NDO1 ,
            T.NDO2 ,
            T.NDO3 ,
            T.NDO4 ,
            T.NDO5 ,
            T.NDO6 ,
            T.NDO7 FROM @Tabela AS T
     )
     
     SELECT R.LegLogin ,
            R.LegDestino ,
            R.flightnumber ,
            R.Proximoflightnumber ,
            R.DepartamentoData ,
            R.Class ,
            NDO0 = IIF(R.NDO0  IS NULL ,( SELECT TOP 1 T.NDO0 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO0),
            NDO1 = IIF(R.NDO1  IS NULL ,( SELECT TOP 1 T.NDO1 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO1),
            NDO2 = IIF(R.NDO2  IS NULL ,( SELECT TOP 1 T.NDO2 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO2),
            NDO3 = IIF(R.NDO3  IS NULL ,( SELECT TOP 1 T.NDO3 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO3),
            NDO4 = IIF(R.NDO4  IS NULL ,( SELECT TOP 1 T.NDO4 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO4),
            NDO5 = IIF(R.NDO5  IS NULL ,( SELECT TOP 1 T.NDO5 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO5),
            NDO6 = IIF(R.NDO6  IS NULL ,( SELECT TOP 1 T.NDO6 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO6),
            NDO7 = IIF(R.NDO7  IS NULL ,( SELECT TOP 1 T.NDO7 FROM  Dados AS T WHERE R.Class = T.Class AND R.Proximoflightnumber + 1 =  T.Proximoflightnumber ),R.NDO7)
    		 FROM Dados R
     

    O resultado foi o sequinte:

    Acredito que seja isso

    Wesley Neves
    Brasilia-DF
    MTA-SQL Server
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves

    Wesley

    Parece muito muito bobo, mas eu não estou conseguindo acertar o seu código com meus campos

     
    WITH Dados AS (
            T.LegOrigin,
            T.LegDestination,
            T.FlightNumber,
    NextFlightNumber = dense_rank() over(partition by BY T1.LegOrigin ORDER BY T1.FlightNumber),
            T.DepartureDate,
            T.Class,
            T.NDO0,
            T.NDO1,
            T.NDO2,
            T.NDO3,
            T.NDO4,
            T.NDO5,
            T.NDO6
            T.NDO7
    --T.NDO8,
    --T.NDO9,
    --T.NDO10 
    FROM ##amostraAUH AS T
     )
    
     SELECT R.LegOrigin,
            R.LegDestination,
            R.FlightNumber,
    R.NextFlightNumber,
            R.DepartureDate,
            R.Class,
            NDO0 = IIF(R.NDO0  IS NULL ,( SELECT TOP 1 T.NDO0 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO0),
            NDO1 = IIF(R.NDO1  IS NULL ,( SELECT TOP 1 T.NDO1 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO1),
            NDO2 = IIF(R.NDO2  IS NULL ,( SELECT TOP 1 T.NDO2 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO2),
            NDO3 = IIF(R.NDO3  IS NULL ,( SELECT TOP 1 T.NDO3 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO3),
            NDO4 = IIF(R.NDO4  IS NULL ,( SELECT TOP 1 T.NDO4 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO4),
            NDO5 = IIF(R.NDO5  IS NULL ,( SELECT TOP 1 T.NDO5 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO5),
            NDO6 = IIF(R.NDO6  IS NULL ,( SELECT TOP 1 T.NDO6 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO6),
            NDO7 = IIF(R.NDO7  IS NULL ,( SELECT TOP 1 T.NDO7 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO7)
    FROM Dados R

    Fica dando erro 

    Msg 102, Level 15, State 1, Line 100
    Incorrect syntax near 'T'.

    No IS NULL

    Msg 156, Level 15, State 1, Line 126
    Incorrect syntax near the keyword 'IS'.

    E nas virgulas depois de cada NDO no fim do IF

    NDO6 = IIF(R.NDO6  IS NULL ,( SELECT TOP 1 T.NDO6 FROM  Dados AS T WHERE R.Class = T.Class AND R.NextFlightNumber + 1 =  T.NextFlightNumber ),R.NDO6),

    Msg 102, Level 15, State 1, Line 133
    Incorrect syntax near ','.




    quarta-feira, 14 de junho de 2017 15:00
  • Boa tarde, Thaís Sakamoto<abbr class="affil"></abbr>.

    Você conseguiu resolver teu problema?
    sexta-feira, 16 de junho de 2017 17:01
  • veja se deu certo

    ;
    WITH    Dados
              AS ( SELECT   T.LegOrigin ,
                            T.LegDestination ,
                            T.FlightNumber ,
                            [NextFlightNumber] = DENSE_RANK() OVER ( PARTITION  BY T.LegOrigin ORDER BY T.FlightNumber ) ,
                            T.DepartureDate ,
                            T.Class ,
                            T.NDO0 ,
                            T.NDO1 ,
                            T.NDO2 ,
                            T.NDO3 ,
                            T.NDO4 ,
                            T.NDO5 ,
                            T.NDO6 ,
                            T.NDO7
    --T.NDO8,
    --T.NDO9,
    --T.NDO10 
                   FROM     ##amostraAUH AS T
                 )
        SELECT  R.LegOrigin ,
                R.LegDestination ,
                R.FlightNumber ,
                R.NextFlightNumber ,
                R.DepartureDate ,
                R.Class ,
                NDO0 = IIF(R.NDO0 IS NULL, ( SELECT TOP 1
                                                    T.NDO0
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO0) ,
                NDO1 = IIF(R.NDO1 IS NULL, ( SELECT TOP 1
                                                    T.NDO1
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO1) ,
                NDO2 = IIF(R.NDO2 IS NULL, ( SELECT TOP 1
                                                    T.NDO2
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO2) ,
                NDO3 = IIF(R.NDO3 IS NULL, ( SELECT TOP 1
                                                    T.NDO3
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO3) ,
                NDO4 = IIF(R.NDO4 IS NULL, ( SELECT TOP 1
                                                    T.NDO4
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO4) ,
                NDO5 = IIF(R.NDO5 IS NULL, ( SELECT TOP 1
                                                    T.NDO5
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO5) ,
                NDO6 = IIF(R.NDO6 IS NULL, ( SELECT TOP 1
                                                    T.NDO6
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO6) ,
                NDO7 = IIF(R.NDO7 IS NULL, ( SELECT TOP 1
                                                    T.NDO7
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO7)
        FROM    Dados R;

    outra coisa qual e a versão do seu sql ??


    Wesley Neves

    • Marcado como Resposta Guilherme Macedo S segunda-feira, 19 de junho de 2017 13:06
    • Não Marcado como Resposta Thaís Sakamoto segunda-feira, 19 de junho de 2017 14:36
    • Marcado como Resposta Thaís Sakamoto segunda-feira, 19 de junho de 2017 14:52
    sexta-feira, 16 de junho de 2017 19:00
  • Bom dia

    Por falta de retorno esta thread esta encerrada !

    Por gentileza, caso necessário abra uma nova thread.

    Atenciosamente,


    Guilherme Macedo S

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet 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, 19 de junho de 2017 13:07
  • veja se deu certo

    ;
    WITH    Dados
              AS ( SELECT   T.LegOrigin ,
                            T.LegDestination ,
                            T.FlightNumber ,
                            [NextFlightNumber] = DENSE_RANK() OVER ( PARTITION  BY T.LegOrigin ORDER BY T.FlightNumber ) ,
                            T.DepartureDate ,
                            T.Class ,
                            T.NDO0 ,
                            T.NDO1 ,
                            T.NDO2 ,
                            T.NDO3 ,
                            T.NDO4 ,
                            T.NDO5 ,
                            T.NDO6 ,
                            T.NDO7
    --T.NDO8,
    --T.NDO9,
    --T.NDO10 
                   FROM     ##amostraAUH AS T
                 )
        SELECT  R.LegOrigin ,
                R.LegDestination ,
                R.FlightNumber ,
                R.NextFlightNumber ,
                R.DepartureDate ,
                R.Class ,
                NDO0 = IIF(R.NDO0 IS NULL, ( SELECT TOP 1
                                                    T.NDO0
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO0) ,
                NDO1 = IIF(R.NDO1 IS NULL, ( SELECT TOP 1
                                                    T.NDO1
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO1) ,
                NDO2 = IIF(R.NDO2 IS NULL, ( SELECT TOP 1
                                                    T.NDO2
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO2) ,
                NDO3 = IIF(R.NDO3 IS NULL, ( SELECT TOP 1
                                                    T.NDO3
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO3) ,
                NDO4 = IIF(R.NDO4 IS NULL, ( SELECT TOP 1
                                                    T.NDO4
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO4) ,
                NDO5 = IIF(R.NDO5 IS NULL, ( SELECT TOP 1
                                                    T.NDO5
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO5) ,
                NDO6 = IIF(R.NDO6 IS NULL, ( SELECT TOP 1
                                                    T.NDO6
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO6) ,
                NDO7 = IIF(R.NDO7 IS NULL, ( SELECT TOP 1
                                                    T.NDO7
                                             FROM   Dados AS T
                                             WHERE  R.Class = T.Class
                                                    AND R.NextFlightNumber + 1 = T.NextFlightNumber
                                           ), R.NDO7)
        FROM    Dados R;

    outra coisa qual e a versão do seu sql ??


    Wesley Neves

    O meu é 2014

    Não consigo ajustar o Is Null

    segunda-feira, 19 de junho de 2017 14:36