我的视图在水平数据透视表中有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'
注意:
我将此计数插入到另一个查询中,我将按其他列名称进行分组。
答案 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或任何查询界面。注意:删除最后的+
,以便它在语法上是正确的。