Я пытаюсь написать запрос, который будет производить очень маленький образец данных из каждого столбца таблицы, в котором образец составлен из верхней 3 наиболее распространенные значения. Эта конкретная проблема является частью более крупной задачи, которая заключается в написании сценариев, которые могут характеризовать базу данных и ее таблицы, целостность данных, а также быстро просматривать общие значения в таблице на основе столбцов. Подумайте об этом как о автоматизированном «анализе» таблицы.Получить три самых распространенных значения из каждого столбца таблицы
В одной колонке я делаю это, просто вычисляя частоту значений, а затем сортируя по частоте. Если бы у меня был столбец с названием «цвет», и все цвета были в нем, и так получилось, что цвет «синий» был в большинстве строк, тогда первое наиболее часто встречающееся значение было бы «синим». В SQL, который легко вычислить.
Однако я не уверен, как бы это сделать с несколькими столбцами.
В настоящее время, когда я делаю расчет по всем столбцам таблицы, я выполняю следующий тип запроса:
USE database;
DECLARE @t nvarchar(max)
SET @t = N'SELECT '
SELECT @t = @t + 'count(DISTINCT CAST(' + c.name + ' as varchar(max))) "' + c.name + '",'
FROM sys.columns c
WHERE c.object_id = object_id('table');
SET @t = SUBSTRING(@t, 1, LEN(@t) - 1) + ' FROM table;'
EXEC sp_executesql @t
Однако его не совсем понятно, как я хотел бы сделать это здесь.
(Sidenote: столбцы, которые имеют тип текста, NTEXT и изображения, так как те будут вызывать ошибки при подсчете различных значений, но я меньше озабочен решением этого)
Но проблема получения тройки самые частые значения за столбец заставили меня полностью застопорить.
В идеале, я хотел бы закончить с чем-то вроде этого:
Col1 Col2 Col3 Col4 Col5
---------------------------------------------------------------------
1,2,3 red,blue,green 29,17,0 c,d,j nevada,california,utah
Я не совсем уверен, что вы пытаетесь сделать здесь, но если вы хотите исключить столбцы определенных типов данных, вы должны использовать столбец system_type_id. Если вы хотите, чтобы текстовое объяснение соединялось из sys.columns в sys.types. –
@SeanLange Я больше беспокоюсь о проблеме рекурсивного подсчета наиболее часто встречающихся значений из всех столбцов таблицы (любая таблица) – Kristian
Правильно ... это та часть, которую я сказал, что я не понимаю, что вы пытаетесь сделать , –