0
votes

Répétez la valeur de la colonne jusqu'à ce que la valeur change de la même valeur de colonne

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)


2 commentaires

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


3 Réponses :


1
votes

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


2 commentaires

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



2
votes

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;


0 commentaires

1
votes

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;


1 commentaires

@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 .