Per ottenere la sequenza successiva è possibile aggiungere un Id
come
WITH seq AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY x.alpha + y.number + z.number) AS Id,
CONVERT(nchar(3), x.alpha + y.number + z.number) AS Result
FROM
(
VALUES
('0'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'),
('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'),
('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'),
('U'), ('V'), ('W'), ('X'), ('Y'), ('Z')
) x(alpha),
(
VALUES
('0'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9')
) y(number),
(
VALUES
('0'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9')
) z(number)
WHERE
NOT (NOT x.alpha BETWEEN '1' AND '9' AND y.number = '0' AND z.number = '0')
)
-- Uncomment to see all results
--SELECT * FROM seq
SELECT Result FROM seq WHERE Id = (SELECT Id + 1 FROM seq WHERE Result = 'Z01')
Risultato
Z02
conteggio completo = 3573 = 999 + (26 * 99)
Hai scritto alcun codice fino ad ora? –
Quale versione di sql-server stai usando? –
Il modo "relazionale" per risolvere questo problema è cross join [A-Z], [0-9], [0-9]. Quindi concatena i valori e ordina il risultato. Altrimenti potrebbe essere usato un approccio più imperativo. Il problema cambia un po 'se si ha bisogno di * riprendere * una sequenza precedente (ad esempio ottenere solo il valore successivo). – user2864740