使用2008版本的sql server写一个查询,在MeetItem20200119表中,JoinName列,MsterName列和MeetSummaryName列中有若干人员姓名且多个姓名之间用逗号隔开,统计这三列中每个名字的出现次数并把其在这三列的出现次数展示出来。
时间: 2024-03-28 18:38:17 浏览: 16
你可以使用以下 SQL 查询语句来实现:
```
SELECT name, SUM(cnt) AS total_count
FROM (
SELECT TRIM(value) AS name, COUNT(*) AS cnt
FROM (
SELECT value
FROM MeetItem20200119
CROSS APPLY STRING_SPLIT(JoinName, ',')
UNION ALL
SELECT value
FROM MeetItem20200119
CROSS APPLY STRING_SPLIT(MasterName, ',')
UNION ALL
SELECT value
FROM MeetItem20200119
CROSS APPLY STRING_SPLIT(MeetSummaryName, ',')
) AS names
GROUP BY value
) AS counts
GROUP BY name
ORDER BY total_count DESC;
```
上述查询中,我们首先使用 `STRING_SPLIT` 函数将每个列中的多个姓名分割成单个姓名。然后使用 `TRIM` 函数去除姓名中可能存在的空格。接着使用 `GROUP BY` 统计每个姓名出现的次数,并将结果保存在一个临时表(子查询)中。最后,再次使用 `GROUP BY` 对姓名进行合并,并对出现次数进行求和,并按照出现次数降序排列输出。
需要注意的是,`STRING_SPLIT` 函数和 `TRIM` 函数是 SQL Server 2016 及以上版本才支持的函数。如果你的 SQL Server 版本低于 2016,需要使用其他方式来实现字符串分割和去除空格。