Разделение тегов в сообщениях проводника данных

Я хочу сделать запрос, в котором будут перечислены теги, упорядоченные по большинству оставшихся без ответа вопросов (у которых есть этот тег), однако, поскольку теги хранятся как разделенные пробелами varchar и, насколько я понимаю, SQL Server ( который использует StackExchange) не имеет функции для разделения строки, я немного не уверен в том, что делать дальше. Я написал это:

SELECT DISTINCT Tags from Posts WHERE AnswerCount = 0;

Который правильно возвращает теги, однако все они сгруппированы по почте:

Результаты

Я много осматривался, но каждый результат, который я нашел, имел создание функции как решение для разделения тегов, но вы не можете создавать функции при обмене данными, так что это невозможно. Есть ли другой способ поместить все теги в один столбец?

1 ответ

Решение

Вы можете сделать это с неэффективным объединением, используя like:

select t.TagName, count(p.Tags)
from Tags t left join
     Posts p
     on p.Tags like '%' + t.TagName + '%'
where p.AnswerCount = 0
group by t.TagName;

Вы должны действительно использовать отдельную соединительную таблицу, PostTags с одной строкой на пост и тегом на этом посте. Этот тип запроса будет намного, намного проще. В SQL есть хороший встроенный механизм хранения списков. Это не строка. Это называется стол. Вы должны использовать его, если у вас есть выбор.

Другие вопросы по тегам