Ma structure de table:
declare @TestTable as table
(
id int,
somedate date,
somevalue int
)
insert into @TestTable values
(1, '2019-01-01', 1000),
(2, '2019-01-02', null ),
(3, '2019-01-03', null),
(4, '2019-01-04', null ),
(5, '2019-01-05', 800),
(6, '2019-01-06', null),
(7, '2019-01-07', null),
(8, '2019-01-08', null),
(9, '2019-01-09', null),
(10, '2019-01-10', 700)
3 Réponses :
Essayez ceci ci-dessous logique-
Démo ici P>
SELECT A.*,
(
SELECT somevalue
FROM @TestTable
WHERE id = (
SELECT MAX(id)
FROM @TestTable
WHERE id <= A.id
AND somevalue IS NOT NULL
)
) new_column
FROM @TestTable A
ORDER BY A.id
Merci pour la réponse .. cela est-il possible de faire avec les fonctions de la fenêtre?
La fonction de fenêtre nécessitait une valeur dans une colonne pour regrouper des lignes. Par exemple, la rangée 1 à 4 appartient à 1 groupe. Avez-vous une colonne comme ça? @AJT
Vous pouvez y parvenir également en utilisant également la fonction de fenêtre. essayez ce qui suit:
select id, somevalue, newvalue=max(somevalue) over (partition by c)
from
(
select id, somevalue
,c=count(somevalue) over (order by id)
from @testtable
) t
order by id;
Vous pouvez y parvenir en utilisant coalesce (transact-sql) .
SELECT
[id]
, somedate
, COALESCE(somevalue,
(SELECT TOP (1) somevalue
FROM @TestTable AS p2
WHERE
p2.somevalue IS NOT NULL
AND p2.[id] <= p.[id] ORDER BY p2.[id] DESC))
FROM @TestTable AS p;
@AJT la réponse à Stackoverflow.com/a/60647757/10532500 est déjà basée sur la fonction Window. Pour en savoir plus sur la fonction de fenêtre, vous pouvez faire référence au lien Sqlshack.com/use- Fenêtre-Fonctions-SQL-Server .
S'il vous plaît montrer votre tentative.
J'ai besoin de logique pour une partie du code..Je ne peut pas mettre le code complet