Usuário com melhor resposta
Contador para mudança de nomes

Pergunta
-
Prezados,
necessito criar um contador quando houver mudança de nome quero somar mais um neste contador.
A tabela final ficaria assim:
Contador Nomes 1 João 1 João 2 Maria 2 Maria 2 Maria 2 Maria 2 Maria 3 José 3 José 3 José 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 5 João 5 João 6 Maria 6 Maria 6 Maria 6 Maria 6 Maria
Respostas
-
Deleted
- Marcado como Resposta Silas.Soares segunda-feira, 12 de junho de 2017 11:40
Todas as Respostas
-
Boa tarde Silas,
Acredito que a função DENSE_RANK te ajude a solucionar esse problema.
De uma olhadas nos exemplos do Books online explica direitinho como funciona.
https://docs.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql
Atenciosamente
Reginaldo Silva
-
-
-
Se quiser criar uma tabela aí para testes, segue os códigos abaixo.
ID DataHoraInsercao Nomes 1 2017-01-01 08:00:10.000 João 2 2017-01-02 09:00:10.000 João 3 2017-01-03 10:00:10.000 Maria 4 2017-01-04 11:00:10.000 Maria 5 2017-01-05 12:00:10.000 Maria 6 2017-01-06 13:00:10.000 Maria 7 2017-01-07 14:00:10.000 Maria 8 2017-01-08 15:00:10.000 José 9 2017-01-09 16:00:10.000 José 10 2017-01-10 17:00:10.000 José 11 2017-01-11 18:00:10.000 Adriano 12 2017-01-12 19:00:10.000 Adriano 13 2017-01-13 20:00:10.000 Adriano 14 2017-01-14 21:00:10.000 Adriano 15 2017-01-15 22:00:10.000 Adriano 16 2017-01-16 23:00:10.000 Adriano 17 2017-01-17 00:00:10.000 Adriano 18 2017-01-18 01:00:10.000 Adriano 19 2017-01-19 02:00:10.000 João 20 2017-01-20 03:00:10.000 João 21 2017-01-21 04:00:10.000 Maria 22 2017-01-22 05:00:10.000 Maria 23 2017-01-23 06:00:10.000 Maria 24 2017-01-24 07:00:10.000 Maria 25 2017-01-25 08:00:10.000 Maria
- Editado Silas.Soares sexta-feira, 9 de junho de 2017 18:40
-
A tabela que postei ficou ruim, se quiser criar as tabela com estes dados:
SET ANSI_NULLS ON
INSERT INTO [dbo].[TabNomes]
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TabNomes](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[DataHoraInsercao] [datetime] NOT NULL,
[Nomes] [nvarchar](255) NOT NULL
) ON [PRIMARY]
([DataHoraInsercao]
,[Nomes])
VALUES
('01/01/2017 08:00:10','João '),
('02/01/2017 09:00:10','João '),
('03/01/2017 10:00:10','Maria'),
('04/01/2017 11:00:10','Maria'),
('05/01/2017 12:00:10','Maria'),
('06/01/2017 13:00:10','Maria'),
('07/01/2017 14:00:10','Maria'),
('08/01/2017 15:00:10','José'),
('09/01/2017 16:00:10','José'),
('10/01/2017 17:00:10','José'),
('11/01/2017 18:00:10','Adriano'),
('12/01/2017 19:00:10','Adriano'),
('13/01/2017 20:00:10','Adriano'),
('14/01/2017 21:00:10','Adriano'),
('15/01/2017 22:00:10','Adriano'),
('16/01/2017 23:00:10','Adriano'),
('17/01/2017 00:00:10','Adriano'),
('18/01/2017 01:00:10','Adriano'),
('19/01/2017 02:00:10','João '),
('20/01/2017 03:00:10','João '),
('21/01/2017 04:00:10','Maria'),
('22/01/2017 05:00:10','Maria'),
('23/01/2017 06:00:10','Maria'),
('24/01/2017 07:00:10','Maria'),
('25/01/2017 08:00:10','Maria')
-
Sim, tem um id para cada linha inserida.
ID DataHoraInsercao Nomes 1 2017-01-01 08:00:10.000 João 2 2017-01-02 09:00:10.000 João 3 2017-01-03 10:00:10.000 Maria 4 2017-01-04 11:00:10.000 Maria 5 2017-01-05 12:00:10.000 Maria 6 2017-01-06 13:00:10.000 Maria 7 2017-01-07 14:00:10.000 Maria 8 2017-01-08 15:00:10.000 José 9 2017-01-09 16:00:10.000 José 10 2017-01-10 17:00:10.000 José 11 2017-01-11 18:00:10.000 Adriano 12 2017-01-12 19:00:10.000 Adriano 13 2017-01-13 20:00:10.000 Adriano 14 2017-01-14 21:00:10.000 Adriano 15 2017-01-15 22:00:10.000 Adriano 16 2017-01-16 23:00:10.000 Adriano 17 2017-01-17 00:00:10.000 Adriano 18 2017-01-18 01:00:10.000 Adriano 19 2017-01-19 02:00:10.000 João 20 2017-01-20 03:00:10.000 João 21 2017-01-21 04:00:10.000 Maria 22 2017-01-22 05:00:10.000 Maria 23 2017-01-23 06:00:10.000 Maria 24 2017-01-24 07:00:10.000 Maria 25 2017-01-25 08:00:10.000 Maria
- Editado Silas.Soares sexta-feira, 9 de junho de 2017 18:24
-
Parece ser está função porém ele organiza pelos nomes para gerar o contador e eu precisava organizar pela data/hora inserção.
Segue abaixo ó código que criei:
SELECT Dense_Rank() Over (Order by [Nomes]) as [Contador] ,Format([DataHoraInsercao],'dd/MM/yyyy HH:mm:ss') AS [DataHoraInsercao] ,[Nomes] FROM [dbo].[TabNomes]
Resultado:
Contador DataHoraInsercao Nomes 1 11/01/2017 18:00:10 Adriano 1 12/01/2017 19:00:10 Adriano 1 13/01/2017 20:00:10 Adriano 1 14/01/2017 21:00:10 Adriano 1 15/01/2017 22:00:10 Adriano 1 16/01/2017 23:00:10 Adriano 1 17/01/2017 00:00:10 Adriano 1 18/01/2017 01:00:10 Adriano 2 19/01/2017 02:00:10 João 2 20/01/2017 03:00:10 João 2 01/01/2017 08:00:10 João 2 02/01/2017 09:00:10 João 3 08/01/2017 15:00:10 José 3 09/01/2017 16:00:10 José 3 10/01/2017 17:00:10 José 4 03/01/2017 10:00:10 Maria 4 04/01/2017 11:00:10 Maria 4 05/01/2017 12:00:10 Maria 4 06/01/2017 13:00:10 Maria 4 07/01/2017 14:00:10 Maria 4 21/01/2017 04:00:10 Maria 4 22/01/2017 05:00:10 Maria 4 23/01/2017 06:00:10 Maria 4 24/01/2017 07:00:10 Maria 4 25/01/2017 08:00:10 Maria
-
Esses campos nomes vem de uma tabela associativa (outra tabela) onde cada nome tem um Id Fixo??
ou seja a pessoa Maria tem uma PK unica pois nessa sua estrutura ora tem ID ora tem ID = 2 ora tem ID = 06
no seu primeiro exemplo
Contador Nomes 1 João 1 João 2 Maria 2 Maria 2 Maria 2 Maria 2 Maria 3 José 3 José 3 José 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 4 Adriano 5 João 5 João 6 Maria 6 Maria 6 Maria 6 Maria 6 Maria Wesley Neves
-
Deleted
- Marcado como Resposta Silas.Soares segunda-feira, 12 de junho de 2017 11:40
-
Obrigado pela ajuda, era exatamente isto que precisava.
- Editado Silas.Soares segunda-feira, 12 de junho de 2017 11:40