У меня есть эта таблица, которую я хочу ранжировать и обновить столбец plan_number.
Используя DENSE_RANK мне удалось сгруппировать большинство данных, но некоторые счета имеют одинаковую сумму до и после разрыва, они будут сгруппированы вместе.
CREATE TABLE dbo.PlanItem(
plan_account INT
, plan_sequence INT
, plan_number INT
, plan_amount DECIMAL(16,2)
, plan_due_date DATETIME
)
INSERT INTO dbo.PlanItem VALUES(12159875,1223931,0,9334.00,'2014-07-31')
INSERT INTO dbo.PlanItem VALUES(12159875,1223932,0,160584.00,'2014-08-31')
INSERT INTO dbo.PlanItem VALUES(12159875,1223933,0,9334.00,'2014-09-30')
INSERT INTO dbo.PlanItem VALUES(12159875,1223934,0,9334.00,'2014-10-31')
INSERT INTO dbo.PlanItem VALUES(12159875,1223935,0,9334.00,'2014-11-30')
INSERT INTO dbo.PlanItem VALUES(12159875,1223936,0,9334.00,'2014-12-31')
INSERT INTO dbo.PlanItem VALUES(12159875,1223937,0,9334.00,'2015-01-31')
INSERT INTO dbo.PlanItem VALUES(12159875,1223938,0,9334.00,'2015-02-28')
INSERT INTO dbo.PlanItem VALUES(12159875,1223939,0,9334.00,'2015-03-31')
Я бы хотел, чтобы эта таблица была ранжирована следующим образом:
12159875,1223931,1,9334.00,'2014-07-31'
12159875,1223932,2,160584.00,'2014-08-31'
12159875,1223933,3,9334.00,'2014-09-30'
12159875,1223934,3,9334.00,'2014-10-31'
12159875,1223935,3,9334.00,'2014-11-30'
12159875,1223936,3,9334.00,'2014-12-31'
12159875,1223937,3,9334.00,'2015-01-31'
12159875,1223938,3,9334.00,'2015-02-28'
12159875,1223939,3,9334.00,'2015-03-31'
Группировка должна основываться на последующих одинаковых plan_amounts.
И упорядоченный от самого старого к новейшему из возможных, от низшего к высокому plan_sequence.
Я попробовал простой DENS_RANK, который отлично работает для большинства данных.
Но когда данные имеют заглавные буквы, а данные до и после заглавных букв совпадают, они будут сгруппированы вместе.
WITH CTE_TEST
AS
(
SELECT *,
DENSE_RANK() OVER (PARTITION BY plan_account ORDER BY plan_amount) AS Dense
FROM dbo.PlanItem
)
UPDATE dbo.PlanItem
SET plan_number = Dense
FROM CTE_TEST
JOIN dbo.PlanItem ON dbo.PlanItem.plan_sequence = CTE_TEST.plan_sequence
GO
Это результат выбора * из порядка dbo.PlanItem по plan_account
12159875,1223933,1,9334.00,'2014-09-30'
12159875,1223934,1,9334.00,'2014-10-31'
12159875,1223935,1,9334.00,'2014-11-30'
12159875,1223936,1,9334.00,'2014-12-31'
12159875,1223937,1,9334.00,'2015-01-31'
12159875,1223938,1,9334.00,'2015-02-28'
12159875,1223939,1,9334.00,'2015-03-31'
12159875,1223931,1,9334.00,'2014-07-31'
12159875,1223932,2,160584.00,'2014-08-31'