2012-07-18 1 views
-1

J'ai une table quelque chose géante comme ceci:SQL: NAs de substitution avec la dernière observation

Date Price1 Price2 
1  13  14.9 
2  13.1  NULL 
3  NULL  14 
4  NULL  14.5 
5  13  14 

Je veux remplir les agences nationales pour que ma table dans SQL se présente comme suit:

Date Price1 Price2 
1  13  14.9 
2  13.1  14.9 
3  13.1  14 
4  13.1  14.5 
5  13  14 

Je suis vraiment nouveau à SQL alors s'il vous plaît excusez-moi. J'ai cherché ici et il semble que vous pouvez le faire dans R mais comment dois-je le faire en SQL. J'utilise Microsoft SQL Server Management. Aussi je ne peux pas sembler comprendre comment insérer correctement une table et ils ne me laisseraient pas poster les photos. Donc, désolé pour le formatage.

+0

Comment décidez-vous de la valeur à mettre à la place de NA? Je vois que vous avez remplacé Price1 NA avec 13.1 et Price2 NAs avec 14.9, mais comment avez-vous trouvé ces chiffres exacts? Du dernier prix avant la date? –

+0

Si c'est NA, remplacez-le par le dernier prix disponible. – Zanam

+0

Eh bien, alors la réponse fournie par @Chandu fera l'affaire, sauf si vous êtes sur Sql Server 2000. –

Répondre

1

Essayez ceci:

UPDATE a 
    SET a.Price1 = b.Price1 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price1 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price1 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 

    UPDATE a 
    SET a.Price2 = b.Price2 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price2 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price2 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 
+0

Et puis répétez, pour toute la table, chaque fois que vous changez une ligne. Blecch. –

+0

@Aaron Bertrand: comment je fais ça? Je suis un débutant alors s'il vous plaît, supportez-moi. – Zanam

+1

Vous utiliseriez un déclencheur, mais je ne le suggère nullement. Ne suffirait-il pas de remplir ces colonnes lorsque vous interrogez les données au lieu de les * stocker * de cette façon? Vous pouvez le faire dans une requête ou dans votre niveau de présentation sans jamais avoir à exécuter une mise à jour ou à gérer les données dépendantes sur d'autres lignes. –

Questions connexes