有没有其他方法可以将rowcount放入,而无需进行联合并指定所有其他列?
例如,假设我创建了#faketable
有4列A, B, C, D
,然后我这样做了:
select * from #faketable
union
select COUNT(*) from #faketable
这不起作用,因为我没有相同数量的列。
我想避免做的是:
select * from #faketable
union
select COUNT(*), null, null, null from #faketable
行计数不能作为列附加,它必须是它自己的行。有什么想法吗?
在这个例子中,输入三个NULLS很好,但如果我有100列,那该怎么办呢?不可能为每列不断添加空值。我试图避免为每列指定一个null。
答案 0 :(得分:0)
<强>更新强>
我认为你想要的是
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的用途。
答案 1 :(得分:0)
运行查询后,系统变量@@ROWCOUNT将具有所选的行数。所以你可以这样做。
select * from faketable
union
select @@ROWCOUNT, null, null, null
但是,这并不会强制RowCount位于最后一行。
您可以使用Common Table Expression轻松完成此操作。你也可以做一个大的子查询,但我更喜欢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
您可以在 SQLFiddle 上查看两个查询。如果你进行一些研究,你可能会找到一种更好的方法来完成两个UNION查询的排序顺序,但这会让你顺利。