2013-07-15 4 views
0

У меня есть представление, которое имеет 200 столбцов данных в сводной таблице по горизонтали. Я хочу использовать COUNT() или SUM() для этих 200 столбцов. Как я могу это сделать без написания огромного 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' 

Примечание:

Я вставив этот счет в другой запрос, где я группирования другой колонке имя.

ответ

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) 
+0

Версия 'SUM()' будет игнорировать любые поля с символами в них, но если у вас есть какие-либо поля, которые содержат целые числа, которые вы не хотите добавлять (например, 'ID'), вы можете их отменить, используя подзапрос: 'FROM (SELECT ID * -1 'NegID', * \t FROM # Table1 \t) AS T1' например. –

+0

@GoatCO благодарит за информацию. – Lamak

+0

У меня нет одинакового типа данных в каждом столбце, к сожалению. Я предполагаю, что поэтому этот метод не работает, поскольку у меня есть дата/метка времени в наборе данных, который не конвертируется. Я всегда мог разместить 200 столбцов в отдельном представлении с первичным ключом и просто объединить их вместе. – Fastidious

0

Вам нужно будет написать каждый столбец.

Самый простой способ - получить список столбцов и либо использовать SQL или Excel, чтобы сделать нужное выражение. Вот пример:

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

Вы можете затем скопировать код в SSMS или как бы то ни было в ваш интерфейс запроса. Примечание: удалите окончательный +, чтобы он был синтаксически корректным.