Usuário com melhor resposta
Consulta Retornando Sequencial por Status

Pergunta
-
Tenho uma tabela com os campos PREFIXO NUMERO STATUS
ex:
AAA 1 Vendido
AAA 2 Vendido
AAA 3 Estoque
AAA 4 Vendido
CCA 1 Vendido
CCA 2 Vendido
CCA 3 Vendido
CCA 4 Vendido
CCA 5 Vendido
CCA 6 Estoque
Preciso que minha consulta retorne PREFIXO NUMERO_INICIAL NUMERO FINAL STATUS
AAA 1 2 Vendido
AAA 3 3 Estoque
AAA 4 4 Vendido
CCA 1 5 Vendido
CCA 6 6 Estoque
Estou apanhando do select q devo realizar, ou se é necessario criar uma view ou sp
Respostas
-
Experimente fazer um teste com essa versão:
declare @Tabela table (Prefixo varchar(10), Numero int, Status varchar(10)); insert into @Tabela values ('AAA', 1, 'Vendido'), ('AAA', 2, 'Vendido'), ('AAA', 3, 'Estoque'), ('AAA', 4, 'Vendido'), ('AAA', 11, 'Vendido'), ('AAA', 12, 'Vendido'), ('CCA', 1, 'Vendido'), ('CCA', 2, 'Vendido'), ('CCA', 3, 'Vendido'), ('CCA', 4, 'Vendido'), ('CCA', 5, 'Vendido'), ('CCA', 6, 'Estoque'), ('CCA', 7, 'Vendido'), ('CCA', 8, 'Vendido'); with CTE_RN as ( select Prefixo, Numero, Status, ROW_NUMBER() OVER(PARTITION BY Prefixo, Status ORDER BY Numero) as RN from @Tabela ) select Prefixo, MIN(Numero) as Numero_Inicial, MAX(Numero) as Numero_Final, Status, Numero - RN as Grupo from CTE_RN group by Prefixo, Status, Numero - RN order by Prefixo, Numero_Inicial
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quarta-feira, 19 de fevereiro de 2014 12:32
- Sugerido como Resposta Durval RamosModerator quinta-feira, 20 de fevereiro de 2014 22:55
- Marcado como Resposta Durval RamosModerator quinta-feira, 8 de maio de 2014 19:49
Todas as Respostas
-
Boa noite,
Robertinho, pelo que entendi você pode agrupar os dados por Prefixo e Status:
select Prefixo, min(Numero) as Numero_Inicial, max(Numero) as Numero_Final, Status from Tabela group by Prefixo, Status
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Assim nao dá! Tenho q consistir se HAVING (MAX(NUM)-MIN(NUM)+1=COUNT(NUM)
Pode ter serie
AAA 1 Vendido
AAA 2 Vendido
AAA 4 Vendido
Tem q retornar
AAA 1 2 Vendido
AAA 4 4 Vendido
Mas nem sempre retorna o correto, tenho q jogar o resultado em uma tabela temporaria e depois consistir se aquela numeracao ja esta na tb temporaria e isso q esta demorando. a tabela tem milhares de registros.
-
Experimente fazer um teste com o script abaixo:
declare @Tabela table (Prefixo varchar(10), Numero int, Status varchar(10)); insert into @Tabela values ('AAA', 1, 'Vendido'), ('AAA', 2, 'Vendido'), ('AAA', 3, 'Estoque'), ('AAA', 4, 'Vendido'), ('CCA', 1, 'Vendido'), ('CCA', 2, 'Vendido'), ('CCA', 3, 'Vendido'), ('CCA', 4, 'Vendido'), ('CCA', 5, 'Vendido'), ('CCA', 6, 'Estoque'); with CTE_Grupo as ( select t.Prefixo, t.Numero, t.Status, t.Numero - coalesce(a.Numero, 0) as Grupo from @Tabela as t left join @Tabela as a on a.Prefixo = t.Prefixo and a.Status = t.Status and a.Numero = t.Numero - 1 ) select Prefixo, MIN(Numero) as Numero_Inicial, MAX(Numero) as Numero_Final, Status, Grupo from CTE_Grupo group by Prefixo, Status, Grupo order by Prefixo, Grupo
Espero que seja útil.
Assinatura: http://www.imoveisemexposicao.com.br
-
Tambem não da!
pega como exemplo o
insert into @Tabela values
('AAA', 1, 'Vendido'),
('AAA', 2, 'Vendido'),
('AAA', 3, 'Estoque'),
('AAA', 4, 'Vendido'),
('AAA', 11, 'Vendido'),
('AAA', 12, 'Vendido');
O AAA 1 2 e 12 ficam no mesmo grupo
-
Experimente fazer um teste com essa versão:
declare @Tabela table (Prefixo varchar(10), Numero int, Status varchar(10)); insert into @Tabela values ('AAA', 1, 'Vendido'), ('AAA', 2, 'Vendido'), ('AAA', 3, 'Estoque'), ('AAA', 4, 'Vendido'), ('AAA', 11, 'Vendido'), ('AAA', 12, 'Vendido'), ('CCA', 1, 'Vendido'), ('CCA', 2, 'Vendido'), ('CCA', 3, 'Vendido'), ('CCA', 4, 'Vendido'), ('CCA', 5, 'Vendido'), ('CCA', 6, 'Estoque'), ('CCA', 7, 'Vendido'), ('CCA', 8, 'Vendido'); with CTE_RN as ( select Prefixo, Numero, Status, ROW_NUMBER() OVER(PARTITION BY Prefixo, Status ORDER BY Numero) as RN from @Tabela ) select Prefixo, MIN(Numero) as Numero_Inicial, MAX(Numero) as Numero_Final, Status, Numero - RN as Grupo from CTE_RN group by Prefixo, Status, Numero - RN order by Prefixo, Numero_Inicial
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quarta-feira, 19 de fevereiro de 2014 12:32
- Sugerido como Resposta Durval RamosModerator quinta-feira, 20 de fevereiro de 2014 22:55
- Marcado como Resposta Durval RamosModerator quinta-feira, 8 de maio de 2014 19:49