如何将临时表的列相加?

时间:2011-12-15 10:42:29

标签: sql-server

在Sql server中,我在临时表中插入行,现在我试图将表末尾的列总和相加。我怎样才能做到这一点。请帮帮我谢谢。

在我的临时表中,

是动态创建的。我怎么能现在总结列。

这是我的查询

 select * from #TempTable 
 union all 
 select SUM(2008),SUM(2009),SUM(2010),SUM(2011) from #TempTable 

3 个答案:

答案 0 :(得分:1)

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

所以:

SELECT colA, colB, colC FROM ...
UNION ALL
SELECT colA FROM ...

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

SELECT colA, colB, colC FROM ...
UNION ALL
SELECT colB, colC, ColA FROM ...

MIGHT 工作,但它会将第二个查询中colB的所有内容与第一个查询中colA中的数据一起放入第一列。

最重要的是,您应该确保匹配的列应该是相同的类型。例如,您不能将日期与字符串混合。服务器将尝试将所有内容转换为顶部查询中找到的类型,但如果(隐式)转换失败,则根本不会返回任何内容。 (好吧,我猜错了...)

如果我们不知道你的#temp-table是什么样的(不要使用SELECT *而是使用SELECT colA, colB, colC),我们无法真正帮助你。

按照返回的错误,我甚至不确定你的问题是否与UNION有关;看来你正在尝试根据它们各自的年份有条件地SUM()一些值......我猜测temp-table中有某种年份或日期列来确定这个?!

答案 1 :(得分:0)

这样做:

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

(更改ColumnName_from_#TempTable)

答案 2 :(得分:0)

据我可以收集的是,您有2008200920102011这些列,并且在尝试引用它们时出现错误?

您需要将它们分隔,因为它们不符合standard rules for object identifiers

SELECT SUM([2008]),
       SUM([2009]),
       SUM([2010]),
       SUM([2011])
FROM   #TempTable