Usuário com melhor resposta
While, Case ou If para copiar o resultado do próximo, colar no atual quando for Null

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
- Editado Thaís Sakamoto segunda-feira, 12 de junho de 2017 21:01
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
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
-
-
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
-
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 ','.
- Editado Thaís Sakamoto quarta-feira, 14 de junho de 2017 15:09
-
-
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
-
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.
-
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