0

有没有其他方法可以引入行数而不必进行联合并指定所有其他列?

例如,假设我创建#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 列呢?不可能为每一列连续添加一个空值。我试图避免为每一列指定一个空值。

4

2 回答 2

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 的用途。

于 2013-09-16T18:45:50.407 回答
0

运行查询后,系统变量@@ROWCOUNT将包含已选择的行数。所以你可以做这样的事情。

select * from faketable
union
select @@ROWCOUNT, null, null, null

但是,这并不强制 RowCount 位于最后一行。

您可以使用公用表表达式轻松完成此操作。你也可以做一个大的子查询,但我更喜欢 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 查询的排序顺序,但这会让您继续前进。

于 2013-09-16T18:53:11.787 回答