在Sql server中,我在临时表中插入行,现在我试图将表末尾的列总和相加。我怎样才能做到这一点。请帮帮我谢谢。
在我的临时表中,是动态创建的。我怎么能现在总结列。
这是我的查询
select * from #TempTable
union all
select SUM(2008),SUM(2009),SUM(2010),SUM(2011) from #TempTable
答案 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)
据我可以收集的是,您有2008
,2009
,2010
,2011
这些列,并且在尝试引用它们时出现错误?
您需要将它们分隔,因为它们不符合standard rules for object identifiers。
SELECT SUM([2008]),
SUM([2009]),
SUM([2010]),
SUM([2011])
FROM #TempTable