Pedro Gaz Postado Agosto 10, 2010 Denunciar Share Postado Agosto 10, 2010 Estou com a seguinte dificuldade:tenho uma tabela do seguinte modo:estaca lote1 lote12 lote13 lote14 lote25 lote26 lote27 lote38 lote19 lote110 lote1 11 lote1.. .... ..preciso fazer um sql que me retorne o seguinte resultadolote1 1 ate 3lote2 4 ate 6lote3 7lote1 9 ate 10Não sei se fui claro, mas é algo desse tipo que preciso.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Agosto 10, 2010 Denunciar Share Postado Agosto 10, 2010 Boa tarde Pedro, Parece que houve um erro na hora da digitação no exemplo. No começo, o lote1 vai de 1 até 3. Depois o lote1 repete de 8 até 11. No resultado, os números iniciais de Estacas não estão de acordo com os lotes... :.) Fiz um exemplo logo abaixo utilizando os dados do seu exemplo. Faça os testes e olhe se é isso mesmo que precisa. Qualquer coisa, pode postar...create table #Lotes (Estaca int, Lote varchar(10)) insert into #Lotes values (1 ,'lote1') insert into #Lotes values (2 ,'lote1') insert into #Lotes values (3 ,'lote1') insert into #Lotes values (4 ,'lote2') insert into #Lotes values (5 ,'lote2') insert into #Lotes values (6 ,'lote2') insert into #Lotes values (7 ,'lote3') insert into #Lotes values (8 ,'lote1') insert into #Lotes values (9 ,'lote1') insert into #Lotes values (10 ,'lote1') insert into #Lotes values (11 ,'lote1') select lote, min(Estaca) De, max(Estaca) Ate from #Lotes group by lote Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pedro Gaz Postado Agosto 10, 2010 Autor Denunciar Share Postado Agosto 10, 2010 Fulvio, meu exeplo esta correto sim, eles não são necessariamente na ordem..e eu não entendi a lógica do seu SQL..Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Agosto 11, 2010 Denunciar Share Postado Agosto 11, 2010 Bom dia Pedro, Então deixa eu entender o que precisa: - Os dados da coluna Estaca são únicas. Não há repetição. - O campo Lote pode conter dados repetidos e fora da ordem. No sql que postei, peguei apenas o mínimo e o máximo das estacas e fiz o agrupamento dos lotes. No seu exemplo:estaca lote1 lote12 lote13 lote14 lote25 lote26 lote27 lote38 lote19 lote110 lote1 11 lote1 Ficou o resultado:Lote DE ATElote1 | 1 | 11lote2 | 4 | 6lote3 | 7 | 7 Se você estiver querendo pegar os intervalos entre os números das estacas (com seus respectivos lotes), aí esta sintaxe não funcionará. Para esta solucção, o que deverá ser feito: - Criar uma temporária com uma ordenação por Estaca e Lote, nesta ordem. - Fazer um loop para verificar os intervalos numéricos. Caso seja o segundo caso, provalvemente a implementação deverá ser realizada via Função ou Procedure. :.) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pedro Gaz Postado Agosto 11, 2010 Autor Denunciar Share Postado Agosto 11, 2010 resolvi em parte o problema usando o seguinte SQL: SELECT MIN(estaca) as menor_estaca, MAX(estaca) as maior_estaca, estatus, CONVERT(CHAR, data, 103) as data FROM tbl_atual WHERE estaca < 1000 GROUP BY estatus, CONVERT(CHAR, data, 103) ORDER BY menor_estaca ASCMas preciso de uma outra condição, o intervalo não pode ser maior que 100, nesse codigo que mostrei ele me agrupara tudo independente da quantidade de valores no intervalo.. Teria que ter algo tipo um contador queverificasse: chegou a 100 faz um novo agrupamento... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Agosto 11, 2010 Denunciar Share Postado Agosto 11, 2010 Bom... já estamos caminhando. rs. Pra seccionar por intervalo, aí você terá que criar uma temporária com loop, pois terá que manipular os dados do resultado. Fiz um exemplo explicativo pra você logo abaixo. Aí você adapta à sua necessidade.-- Criação de tabela de teste create table #Lotes (Estaca int, Lote varchar(10)) insert into #Lotes values (1 ,'lote1') insert into #Lotes values (2 ,'lote1') insert into #Lotes values (3 ,'lote1') insert into #Lotes values (4 ,'lote2') insert into #Lotes values (5 ,'lote2') insert into #Lotes values (6 ,'lote2') insert into #Lotes values (7 ,'lote3') insert into #Lotes values (8 ,'lote1') insert into #Lotes values (9 ,'lote1') insert into #Lotes values (10 ,'lote1') insert into #Lotes values (11 ,'lote1') -- Vrificação select * from #Lotes -- Criação de temporária para manipulação create table #Agrupamento (Lote varchar(10), De int, Ate int, Controle int identity) -- Inserção do resultado insert into #Agrupamento select lote, min(Estaca) De, max(Estaca) Ate from #Lotes group by lote -- Declaração de variaveis -- Selecione tudo para abaixo e rode até o END Declare @Controle int Declare @De int Declare @Ate int Declare @Intervalo int Declare @Lote varchar(10) Set @Controle = 1 -- Loop While @Controle <= (select max(controle) from #Agrupamento) Begin -- resgata os valores que serão manipualdos set @Lote = (select lote from #Agrupamento where controle=@Controle) set @De = (select de from #Agrupamento where controle=@Controle) set @Ate = (select Ate from #Agrupamento where controle=@Controle) -- Verifica se o intervalo é maior que 100. No meu caso, coloquei o intervalo maior que 3 para testes. if (@Ate - @De) > 3 Begin Set @Intervalo = (@De + 3) -- insere na tabela. Como possui a coluna Controle identity, os dados passarão nomvamente por verificação. insert into #Agrupamento values (@Lote, @De, @Intervalo) insert into #Agrupamento values (@Lote, @Intervalo, @Ate) -- Deleta o intervalo pesquisado delete from #Agrupamento where controle=@Controle End -- incrementa o controle. set @Controle = @Controle + 1 End -- Verificação do resultado select * from #Agrupamento order by lote, de Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Pedro Gaz
Estou com a seguinte dificuldade:
tenho uma tabela do seguinte modo:
estaca lote
1 lote1
2 lote1
3 lote1
4 lote2
5 lote2
6 lote2
7 lote3
8 lote1
9 lote1
10 lote1
11 lote1
.. ..
.. ..
preciso fazer um sql que me retorne o seguinte resultado
lote1 1 ate 3
lote2 4 ate 6
lote3 7
lote1 9 ate 10
Não sei se fui claro, mas é algo desse tipo que preciso..
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.