将值从一个表插入到SQL Server上的存储过程中的另一个表中

时间:2011-07-28 08:42:47

标签: sql stored-procedures

我的存储过程中有临时表。它看起来像这样:

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

另一张表看起来像这样:

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

如何将第二个表中的值导入存储过程中第一个表的正确列? (第二个表中的名称和列不是唯一的。例如,可以有更多的aaa NT组合。在这种情况下,必须将值相加。)

NT,AB列的值来自另一个表。在VB.Net中,我用循环解决了这个问题。我将所有数据都放在数据表中,然后过滤为“aaa”,“bbb”,这样我就可以获得NT,AB值而无需一直查询数据库。 (您可以假设名称列是唯一的,实际上有更多列是唯一的列)

2 个答案:

答案 0 :(得分:1)

这假定:

  • name, column在OtherTable中是唯一的(例如,某些名称和列组合永远不会有2行)
  • 您对column ='CD'
  • 不感兴趣

so(在发现需要SUM后编辑)

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

答案 1 :(得分:0)

您可以通过简单的查询获得结果:

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