Eu tenho uma tabela assim no sql server 2014:
ID | Start_mile|End_mile
1 |5.23 |7.464
2 |2.333 |6.124
O que eu quero fazer é dividir as milhas em milésimos por ID assim:
ID |start_mile|end_mile
1 |5.230 |5.231
1 |5.231 |5.232
1 |5.232 |5.233
....
1 |7.463 |7.464
...
Alguma ideia de como fazer isso? Estou tentando ficar longe dos cursores, a menos que essa seja a única maneira de fazer isso.
Consegui reunir essa consulta, mas não tenho certeza de como incorporá-la ao ID e aos limites de milhas que tenho para que ela seja executada em toda a tabela sem as variáveis De e Para declaradas:
DECLARE @from decimal(15, 3) = 0.980;
DECLARE @to decimal(15, 3) = 1.024;
;WITH cte AS
(SELECT @from AS Value
UNION ALL
SELECT CONVERT(decimal(15, 3), Value + 0.001)
FROM cte
WHERE Value < @to)
SELECT *
FROM cte
option (maxrecursion 0)
Se você não quiser usar um CTE recursivo, use o exemplo de consulta abaixo:
Isso deve funcionar até 6 milhões de milhas para um id.
A tabela de valores spt pode ser substituída por uma tabela de números de algum tipo.
DB<>Fiddle
Você só precisa referenciar os valores iniciais e finais na âncora.
Esta é uma maneira de fazê-lo. Esta é apenas uma maneira. Existem várias outras maneiras de fazer isso, e todas as maneiras envolvem alguns loops e compensações, mas uma vez que essa maneira é preparada, nenhum outro loop é necessário.
Outros métodos possíveis incluem uma tabela de números verdadeiros (valores de 0 a qualquer um) com cálculos adicionais para determinar o corte superior, uma versão do seu CTE incorporado em uma função com valor de tabela como esta:
e muitos outros