水平计数列

时间:2013-07-15 17:02:47

标签: sql sql-server tsql

我的视图在水平数据透视表中有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'

注意:

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

你将不得不写出每一栏。

最简单的方法是获取列列表,并使用SQL或Excel来制作所需的表达式。这是一个例子:

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

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