Разделение тегов в сообщениях проводника данных
Я хочу сделать запрос, в котором будут перечислены теги, упорядоченные по большинству оставшихся без ответа вопросов (у которых есть этот тег), однако, поскольку теги хранятся как разделенные пробелами 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 есть хороший встроенный механизм хранения списков. Это не строка. Это называется стол. Вы должны использовать его, если у вас есть выбор.