Sql server 如何对临时表的列求和?

Sql server 如何对临时表的列求和?,sql-server,Sql Server,在SQL Server中,我在临时表中插入一行,并尝试对表末尾的列总数求和。我该怎么做 在我的临时表中,列是动态创建的。我现在如何对列求和 这是我的问题 select * from #TempTable union all select SUM(2008),SUM(2009),SUM(2010),SUM(2011) from #TempTable 但它给出了一个错误: 列名2008200920102011无效 这样做: select * from #TempTable uni

在SQL Server中,我在临时表中插入一行,并尝试对表末尾的列总数求和。我该怎么做

在我的临时表中,列是动态创建的。我现在如何对列求和

这是我的问题

 select * from #TempTable 
 union all 
 select SUM(2008),SUM(2009),SUM(2010),SUM(2011) from #TempTable 
但它给出了一个错误:

列名2008200920102011无效

这样做:

 select * from #TempTable 
 union all 
 select sum(ColumnName_from_#TempTable) from #TempTable

(将ColumnName_从#tentable更改为)

执行UNION ALL时,最重要的是要知道所有查询必须返回相同数量的列。 还要记住,列是由它们在结果集中的位置而不是它们的名称联合起来的

因此:

将返回错误,因为列数不匹配

SELECT colA, colB, colC FROM ...
UNION ALL
SELECT colB, colC, ColA FROM ...
可能会起作用,但它会将第二个查询中的colB和第一个查询中在colA中找到的数据一起放入第一列

最重要的是,您应该确保匹配的列应该是相同的类型。例如,你不能把日期和字符串混在一起。服务器将尝试将所有内容转换为顶部查询中的类型,但如果(隐式)转换失败,则不会返回任何内容。(嗯,我想返回了一个错误=)

如果我们不知道您的临时表是什么样子(不要使用
SELECT*
,而是使用
SELECT colA、colB、colC
),我们就无法真正帮助您


根据返回的错误,我甚至不确定你的问题是工会的问题;似乎您也在尝试根据年份对一些值进行有条件的求和。。。我猜临时表中有某种年份或日期列来确定这一点

据我所知,您有名为
2008
2009
2010
2011
的栏目,您在尝试引用这些栏目时出错了

您需要对它们进行界定,因为它们不符合标准

SELECT colA, colB, colC FROM ...
UNION ALL
SELECT colB, colC, ColA FROM ...
SELECT SUM([2008]),
       SUM([2009]),
       SUM([2010]),
       SUM([2011])
FROM   #TempTable