我在数据库字段中有一个标签列表。有些或大多数出现多次。 我想列出不同的标签名称,并将每个不同标签出现的次数放在括号中。到目前为止,这是我的代码。它显示不同的标签值,但仅显示每个标签值的计数为 1,即使大多数标签值出现多次。
<%
SET LIST1 = CONN.EXECUTE("SELECT DISTINCT(TRIM(TAGS_)) AS TAGS_ FROM STORY_TAGS ORDER BY TAGS_ ASC")
DO WHILE NOT LIST1.EOF
V1 = TRIM(LIST1("TAGS_"))
SET LIST2 = CONN.EXECUTE("SELECT COUNT(TAGS_) AS CNT1 FROM STORY_TAGS WHERE TAGS_ = '"&V1&"'")
DO WHILE NOT LIST2.EOF
vtag1 = list2("CNT1")
%>
我不知道为什么这不起作用。可能很简单。
如果您使用的是 SQL Server 2016 或更高版本,那么您可以使用
string_split
:
create table #movies
(
title varchar(100),
tags varchar(100)
)
insert into #movies values
('A Haunting in Venice','crime,drama,horror'),
('Barbie','adventure,comedy,fantasy'),
('Elemental','animation,adventure,comedy'),
('Talk to Me','horror,thriller')
select value as tag, count(*) as moviesWithTag
from #movies
cross apply string_split(tags, ',')
group by value
order by count(*) desc, value
drop table #movies
结果:
标签 | 带有标签的电影 |
---|---|
冒险 | 2 |
喜剧 | 2 |
恐怖 | 2 |
动画 | 1 |
犯罪 | 1 |
戏剧 | 1 |
幻想 | 1 |
惊悚片 | 1 |