Usuário com melhor resposta
Como Indexar intercalado por sexo: F e M - na Ordem de Peso(Tipo).

Pergunta
-
Respostas
-
Segue exemplo:
Create Table #TabelaPrincipal (Id int Identity, Nome VarChar(20), Sexo Char(01), Peso Tinyint) Insert Into #TabelaPrincipal Values ('Juliana', 'F', 2), ('Maristela', 'F', 1), ('João', 'M', 7), ('Perla', 'F', 4), ('Renan', 'M', 10), ('Helio', 'M', 20), ('Sonia', 'F', 5), ('Eduardo', 'M', 4), ('Maria Helena', 'F', 3), ('José', 'M', 90) -- Feminino Select IdAux = Identity(int, 1, 2), Nome, Sexo, Peso Into #TabelaFeminino From #TabelaPrincipal Where (Sexo = 'F') Order by Peso -- Masculino Select IdAux = Identity(int, 2, 2), Nome, Sexo, Peso Into #TabelaMasculino From #TabelaPrincipal Where (Sexo = 'M') Order by Peso Select * From #TabelaFeminino Union Select * From #TabelaMasculino Order by IdAux
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Editado Roberson Ferreira _Moderator quarta-feira, 10 de outubro de 2012 16:46
- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:43
-
João, segue sugestão:
-- declarando uma tabela temporária declare @tb as table ( id int, Nome varchar(80), Sexo char(1), Peso tinyint ) -- populando a tabela insert into @tb values (1,'Juliana', 'F',2), (2,'Maristela', 'F',1), (3,'João', 'M',7), (4,'Perla', 'F',4), (5,'Renan', 'M',10), (6,'Hélio', 'M',20), (7,'Sônia', 'F',5), (8,'Eduardo', 'M',4), (9,'Maria Helena', 'F',3), (10,'José', 'M',90) --select final SELECT Id, Nome, Sexo, Peso FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Sexo ORDER BY Peso) as N FROM @TB ) AS X ORDER BY N, Sexo /* (10 linha(s) afetadas) Id Nome Sexo Peso 2 Maristela F 1 8 Eduardo M 4 1 Juliana F 2 3 João M 7 9 Maria Helena F 3 5 Renan M 10 4 Perla F 4 6 Hélio M 20 7 Sônia F 5 10 José M 90 */
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:43
-
OK.
É só clicar em "Marcar como Resposta", nos posts que serviram exatamente como resposta à sua questão.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:44
Todas as Respostas
-
João, não acho que isto é possivel, para criar um indice fisico (clustered) o indice pode sim conter varias colunas, mas acho que não teria como intercalar uma ordenação entre 2 colunas, teria que ser 1 e depois a outra.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
Segue exemplo:
Create Table #TabelaPrincipal (Id int Identity, Nome VarChar(20), Sexo Char(01), Peso Tinyint) Insert Into #TabelaPrincipal Values ('Juliana', 'F', 2), ('Maristela', 'F', 1), ('João', 'M', 7), ('Perla', 'F', 4), ('Renan', 'M', 10), ('Helio', 'M', 20), ('Sonia', 'F', 5), ('Eduardo', 'M', 4), ('Maria Helena', 'F', 3), ('José', 'M', 90) -- Feminino Select IdAux = Identity(int, 1, 2), Nome, Sexo, Peso Into #TabelaFeminino From #TabelaPrincipal Where (Sexo = 'F') Order by Peso -- Masculino Select IdAux = Identity(int, 2, 2), Nome, Sexo, Peso Into #TabelaMasculino From #TabelaPrincipal Where (Sexo = 'M') Order by Peso Select * From #TabelaFeminino Union Select * From #TabelaMasculino Order by IdAux
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Editado Roberson Ferreira _Moderator quarta-feira, 10 de outubro de 2012 16:46
- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:43
-
João, segue sugestão:
-- declarando uma tabela temporária declare @tb as table ( id int, Nome varchar(80), Sexo char(1), Peso tinyint ) -- populando a tabela insert into @tb values (1,'Juliana', 'F',2), (2,'Maristela', 'F',1), (3,'João', 'M',7), (4,'Perla', 'F',4), (5,'Renan', 'M',10), (6,'Hélio', 'M',20), (7,'Sônia', 'F',5), (8,'Eduardo', 'M',4), (9,'Maria Helena', 'F',3), (10,'José', 'M',90) --select final SELECT Id, Nome, Sexo, Peso FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Sexo ORDER BY Peso) as N FROM @TB ) AS X ORDER BY N, Sexo /* (10 linha(s) afetadas) Id Nome Sexo Peso 2 Maristela F 1 8 Eduardo M 4 1 Juliana F 2 3 João M 7 9 Maria Helena F 3 5 Renan M 10 4 Perla F 4 6 Hélio M 20 7 Sônia F 5 10 José M 90 */
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:43
-
João, se você puder usar o Row_Number (se sua versão de SQL permitir), seria bem melhor.
Mas neste caso Leonardo, acho que poderíamos acoplar uma CTE ao seu exemplo, pra ficar 100%:
declare @tb as table ( id int, Nome varchar(80), Sexo char(1), Peso tinyint ) -- populando a tabela insert into @tb values (1,'Juliana', 'F',2), (2,'Maristela', 'F',1), (3,'João', 'M',7), (4,'Perla', 'F',4), (5,'Renan', 'M',10), (6,'Hélio', 'M',20), (7,'Sônia', 'F',5), (8,'Eduardo', 'M',4), (9,'Maria Helena', 'F',3), (10,'José', 'M',90) --select final ;With CTE as (SELECT *, IdAux = ROW_NUMBER() OVER (PARTITION BY Sexo ORDER BY Peso) FROM @tb) Select IdAux, id, Nome, Sexo, Peso FROM CTE ORDER BY IdAux, Peso
Mas se a versão do SQL que estiver usando for 2000 ou inferior, aí só criando colunas Identity (conforme meu primeiro exemplo).
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
-
-
-
OK.
É só clicar em "Marcar como Resposta", nos posts que serviram exatamente como resposta à sua questão.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta João Neves quinta-feira, 11 de outubro de 2012 21:44
-
João segue mais um exemplo, caso seu sql seja 2000 ou inferior.
Create Table #TabelaPrincipal (Id int Identity, Nome VarChar(20), Sexo Char(01), Peso Tinyint) Insert Into #TabelaPrincipal Values ('Juliana', 'F', 2), ('Maristela', 'F', 1), ('João', 'M', 7), ('Perla', 'F', 4), ('Renan', 'M', 10), ('Helio', 'M', 20), ('Sonia', 'F', 5), ('Eduardo', 'M', 4), ('Maria Helena', 'F', 3), ('José', 'M', 90) SELECT Id, Nome, Sexo, Peso FROM ( Select Id, Nome, Sexo, Peso, N = (SELECT COUNT(B.ID) FROM #TabelaPrincipal AS B WHERE B.SEXO = A.SEXO AND B.PESO <=A.PESO) From #TabelaPrincipal AS A ) AS X Order by N, SEXO
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino