Sql 是否要将行计数与作为其自身行返回的记录数合并?

Sql 是否要将行计数与作为其自身行返回的记录数合并?,sql,sql-server-2008,union,Sql,Sql Server 2008,Union,是否有其他方法可以在不必进行并集并指定所有其他列的情况下引入行计数 例如,假设我创建了包含4列的#faketable,A、B、C、D,然后我执行以下操作: select * from #faketable union select COUNT(*) from #faketable 这不起作用,因为我没有相同的列数 我试图避免这样做: select * from #faketable union select COUNT(*), null, null, null from #faketable

是否有其他方法可以在不必进行并集并指定所有其他列的情况下引入行计数

例如,假设我创建了包含4列的
#faketable
,A、B、C、D,然后我执行以下操作:

select * from #faketable
union
select COUNT(*) from #faketable
这不起作用,因为我没有相同的列数

我试图避免这样做:

select * from #faketable
union
select COUNT(*), null, null, null from #faketable
行计数不能作为列追加,它必须是它自己的行。有什么想法吗


在这个例子中,输入三个空值是可以的,但是如果我有100列呢。不可能为每列连续添加空值。我试图避免为每一列指定一个空值。

update

我想你想要的是

SELECT Table1.A, Table1.B, Table1.C, Table1.D, COUNT(*)
FROM #faketable as Table1
我的语法可能有点混乱,但你根本不需要工会

我以为你想做的事

如果我对这个问题理解正确,我想你应该这样做

SELECT * FROM #faketable
UNION
SELECT COUNT(A),COUNT(B),COUNT(C), COUNT(D) FROM #faketable

如果您这样做是为了报告目的,我建议使用报告软件,这种类型的东西不是SQL SERVER的用途。

运行查询后,系统变量将具有所选的行数。所以你可以这样做

select * from faketable
union
select @@ROWCOUNT, null, null, null
但是,这并不强制RowCount位于最后一行

您可以使用a轻松完成此操作。你也可以做一个大的子查询,但我更喜欢CTE。基本上,在这个解决方案中,我添加了一个SortOrder列,以强制行计数位于末尾,然后在结果中不包括该列

;with myCTE as
(
  select 1 as SortOrder, A, B, C, D from faketable
  union
  select 2 as SortOrder, @@ROWCOUNT, null, null, null
)
select datatype, A, B, C, D
from myCTE
order by SortOrder
GO

您可以在上看到两个查询都在运行。如果您进行一些研究,您可能会找到一种更好的方法来完成两个联合查询的排序顺序,但这会让您成功。

是否有什么原因使您不能只返回两个结果集,一个包含数据,另一个作为计数?您是否尝试了
联接
?@MartyMcVry,这难道不是给了我一个额外的列而不是一行吗?@Becuzz,结果集必须来自一个输出,你试图避免的查询有什么不好?此外,如果您将查询结果返回到应用程序代码(如.net、coldfusion等),则使用该代码获取记录计数非常简单。这并不能通过为每列添加所有“null”来解决必须合并的问题。如果我的结果集是100列怎么办?@user2587725结果集中的所有行都需要具有相同的列数。你希望其他列中有什么?Adam,我希望这些列中也有null,我想我正在寻找一种更快的方法,将null附加到行计数后的所有列中,而不是将每个列都指定为null。再说一次,如果我有100多列,它看起来会很混乱