Назад | Перейти на главную страницу

Группировка: возврат 0 для групп без данных

У меня есть таблица с текстовым полем. Я создал запрос, который берет длину данных этих полей и в основном возвращает гистограмму.

SELECT TEXTFieldSize, COUNT(TEXTFieldSize) AS Count FROM (SELECT DATALENGTH(data) AS TEXTFieldSize FROM table) AS Fields GROUP BY TEXTFieldSize ORDER BY TEXTFieldSize;
 ________________
| Length | Count |
|      1 |     5 |
|      3 |     2 |
|      6 |    12 |
|________|_______|

Моя проблема в том, что для правильного анализа мне также нужны строки для значений, у которых счетчик равен нулю.

SELECT ???
 ________________
| Length | Count |
|      1 |     5 |
|      2 |     0 |
|      3 |     2 |
|      4 |     0 |
|      5 |     0 |
|      6 |    12 |
|________|_______|

Заранее спасибо!

Создать таблицу чисел (способ SQL Server)

CREATE TABLE dbo.Numbers (Num int NOT NULL PRIMARY KEY)
INSERT dbo.Numbers (Num)
SELECT TOP 8000 ROW_NUMBER() OVER (ORDER BY C1.column_id)
FROM sys.columns C1 CROSS JOIN sys.columns C2

Ответ:

SELECT N.Num AS TEXTFieldSize, COUNT(t.data) AS CountOf
FROM
  dbo.Numbers N
  LEFT JOIN
  mytable t ON N.Num = DATALENGTH(t.data)
WHERE
  N.Num <= (SELECT MAX(DATALENGTH(data)) FROM mytable)
GROUP BY N.Num
ORDER BY N.Num;