0

我有一个在水平透视表中有 200 列数据的视图。我想对这 200 列进行 COUNT() 或 SUM() 。如何在不编写必须写出每一列的巨大 SQL 查询的情况下完成此操作?

我是如何想象的:

COUNT( [Column 1] -> [Column 200]) // Counts all values in Column 1 through Column 200.

它是怎样的:

COUNT([Column 1]) +  COUNT([Column 2 ]) +  COUNT([Column 3])... AS 'Total'

笔记:

我将此计数插入到另一个查询中,在该查询中我按另一个列名进行分组。

4

2 回答 2

7

如果您想在不明确写入每一列的情况下计算一行中具有任何值的列,那么您可以使用XML PATH(尽管它假定每列的数据类型相同,而且我不太确定数据集的性能):

SELECT T2.X.value('count(*/text())', 'int') as ColumnCount 
FROM YourTable AS T1 
CROSS APPLY (SELECT T1.* 
             FOR XML PATH(''), TYPE) AS T2(X)
于 2013-07-15T17:11:46.517 回答
0

你将不得不写出每一列。

最简单的方法是获取列列表,然后使用 SQL 或 Excel 来制作您想要的表达式。这是一个例子:

select '['+Column_Name+'] +'
from Information_Schema.columns c
where table_name = @YourTableName

然后,您可以将代码复制到 SSMS 或任何您的查询界面中。注意:删除最后的+,所以它在语法上是正确的。

于 2013-07-15T17:12:24.660 回答