Sql server 如何对临时表的列求和?
在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
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