Consultas de linhas ímpares SQL SERVER

SQL Server

SQL

Banco de Dados

23/11/2017

Olá, Possuo a seguinte dúvida a ser respondida.

Preciso criar script de consulta que retorne da tabela abaixo somente as suas linhas ímpares, ordenadas de forma ascendente:

declare @table table (coluna1 varchar(50)) insert into @table values ('Anthony'),('Miguel'),('Benjamin'),('Lucca'),('Enzo'),('Martim'), ('Noah'),('Gael'),('Henrique'),('Heitor'),('Nícolas'),('Bernardo'), ('Filipe'),('Arthur'),('Apolo'),('José'),('João'),('Antônio'), ('Vicente'),('Alice'),('Luna'),('Valentina'),('Isabela'),('Larissa' ), ('Laura'),('Antonella'),('Victoria'),('Julia'),('Manuela'),('Ana'), ('Camila'),('Beatriz'),('Elisa'),('Sophia'),('Mayara'),('Maria')
Observação: Não posso alterar o script acima criando outro campo como id.
Aureo Neto

Aureo Neto

Curtidas 0

Respostas

Cleyton Alberti

Cleyton Alberti

23/11/2017

Tenta assim:
SELECT coluna1 FROM table t1
WHERE t1.coluna1 IN
(
SELECT
CASE WHEN ROW_NUMBER() OVER(ORDER BY t2.coluna1) % 2 = 0
THEN t2.coluna1
ELSE ''
END
FROM table t2
)
GOSTEI 0
Cleyton Alberti

Cleyton Alberti

23/11/2017

Ressalta-se que para uma tabela que tenha muitos dados isso não seria aconselhável.
Dai o correto seria criar uma nova coluna.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

23/11/2017

eu faria um pouco diferente:

SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY coluna1) linha, coluna1 FROM table
) TAB WHERE linha % 2 > 0
ORDER BY linha
GOSTEI 0
Vinicius Diniz

Vinicius Diniz

23/11/2017

select *
from @table
where mod(ROW_NUMBER(),2) <> 0
order by 1


Então a ideia é dividir o id da lina por 2 se der resto na divisão é impar, depois é só ordenar. Cara eu não tenho sql server instalado aqui por isso não sei se vai dar erro na sintaxe. Eu fiz isso baseado mais no oracle mas acredito que a sintaxe deve estar certa
Espero ter ajudado.
GOSTEI 0
POSTAR