У меня необычная ситуация. Пожалуйста, обратите внимание на следующий код:Процент значений для Топ 3 из поля символов
IF OBJECT_ID('tempdb..#CharacterTest') IS NOT NULL
DROP TABLE #CharacterTest
CREATE TABLE #CharacterTest
(
[ID] int IDENTITY(1, 1) NOT NULL,
[CharField] varchar(50) NULL
)
INSERT INTO #CharacterTest (CharField)
VALUES ('A')
, ('A')
, ('A')
, ('A')
, ('B')
, ('B')
, ('B')
, ('C')
, ('C')
, ('D')
, ('D')
, ('F')
, ('G')
, ('H')
, ('I')
, ('J')
, ('K')
, ('L')
, ('M')
, ('N')
, (' ')
, (' ')
, (' ')
, (NULL)
, ('');
Я хотел бы запрос, который дает мне строку символов, как это: А (16%), B (12%), C (8%)
Пожалуйста обратите внимание на следующее:
- Я не хочу иметь пустые строки, строки с пробелами или нулями, перечисленных в топ-3, но я хочу, процент значений рассчитывается с использованием всего количества записей для таблицы ,
- Связи могут быть проигнорированы, поэтому, если в списке было 22 значения с частотой 8%, все в порядке, чтобы просто вернуть то, что было первым.
- Проценты могут быть округлены до целых чисел.
Я хотел бы найти самый простой способ написать этот запрос, сохраняя при этом совместимость T-SQL с SQL Server 2005. Каков наилучший способ сделать это? Функции окна?
Нет переменных и волос быстрее, чем у меня на моей коробке ... приятно –