2011-07-28 4 views
1

J'ai une table temporaire dans ma procédure stockée. Il ressemble à ceci:Insérer des valeurs d'une table dans une autre table dans une procédure stockée sur SQL Server

name NT AB 
aaa NULL NULL 
bbb NULL NULL 
... 

L'autre table ressemble à ceci:

name column value 
aaa NT  2.3 
aaa NT  4.1 
aaa AB  5.2 
bbb CD  3.6 
bbb NT  4.5 
... 

Comment puis-je obtenir les valeurs de la deuxième table dans la bonne colonne de la première table dans une procédure stockée? (Le nom et la colonne de la seconde table ne sont pas uniques, par exemple il peut y avoir plus de combinaisons aaa NT, dans ce cas les valeurs doivent être additionnées.)

Les valeurs des colonnes NT, AB proviennent d'un autre table. Dans VB.Net j'ai résolu ce problème avec une boucle. J'avais toutes les données dans un datatable et ensuite filtré pour "aaa", "bbb" afin que j'obtiendrais la valeur NT, AB sans avoir à interroger la DB tout le temps. (Vous pouvez supposer que la colonne de nom est unique, en réalité, il y a plus de colonnes qui sont uniques ensemble)

Répondre

0

Vous pouvez avoir votre résultat avec une requête simple:

SELECT name, 
     SUM(CASE WHEN column = 'NT' THEN value ELSE 0 END) as NT, 
     SUM(CASE WHEN column = 'AB' THEN value ELSE 0 END) as AB 
FROM otherTable 
GROUP BY name 
1

Cela suppose que:

  • name, column est unique en uneautretable (par exemple, jamais 2 lignes pour une combinaison de nom et de la colonne)
  • Vous n'êtes pas intéressé dans la colonne = « CD »

donc (Edité après avoir découvert que la somme est nécessaire)

UPDATE 
    t 
SET 
    NT = O1.TheSum, 
    AB = O2.TheSum 
FROM 
    #temptable T 
    LEFT JOIN 
    (
    SELECT SUM(value) AS TheSum, name 
    FROM OtherTable 
    WHERE column = 'NT' 
    GROUP BY name 
    ) O1 ON T.name = O1.name 
    LEFT JOIN 
    (
    SELECT SUM(value) AS TheSum, name 
    FROM OtherTable 
    WHERE column = 'AB' 
    GROUP BY name 
    ) O2 ON T.name = O2.name 
+0

Il pourrait y avoir par exemple plus de valeurs NT pour aaa dans d'autres table. Dans ce cas, je devrais résumer toutes ces valeurs. – smark

+0

@smark: bien, mettez à jour votre question alors c'est ** correct **. Vous n'avez pas donné d'informations complètes – gbn

Questions connexes