使用SUBSTRING、CHARINDEX、LEN等函数,写一个sql server查询,不能使用string_split函数。在MeetItem表中进行查询,表中JoinName列,MasterName列MeetSummaryName列,其中JoinName列是text类型,MsterName列MeetSummaryName列是varchar类型。这三列中有若干人员的姓名,并且如果有多个姓名之间用逗号隔开,处于第一个的姓名前面没有逗号,处于最后一个的姓名后面没有逗号,只有一个姓名则不用逗号分割。统计每个姓名的在这三列总共出现次数以及分别在每一列的出现次数并展示出来。
时间: 2024-04-13 18:31:15 浏览: 20
你可以使用SUBSTRING、CHARINDEX和LEN函数结合使用来实现这个查询。以下是一个示例的SQL查询:
```sql
SELECT
name,
COUNT(*) AS totalOccurrences,
SUM(CASE WHEN CHARINDEX(',' + name + ',', ',' + JoinName + ',') > 0 THEN 1 ELSE 0 END) AS occurrencesInJoinName,
SUM(CASE WHEN CHARINDEX(',' + name + ',', ',' + MasterName + ',') > 0 THEN 1 ELSE 0 END) AS occurrencesInMasterName,
SUM(CASE WHEN CHARINDEX(',' + name + ',', ',' + MeetSummaryName + ',') > 0 THEN 1 ELSE 0 END) AS occurrencesInMeetSummaryName
FROM
(
SELECT
SUBSTRING(',' + JoinName + ',', n, CHARINDEX(',', ',' + JoinName + ',', n) - n) AS name
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY t.JoinName ORDER BY (SELECT NULL)) AS n
FROM
MeetItem t
WHERE
t.JoinName <> ''
AND LEN(t.JoinName) > 0
AND SUBSTRING(',' + JoinName + ',', n, 1) = ','
) AS x
) AS y
GROUP BY
name
ORDER BY
totalOccurrences DESC;
```
这个查询将会返回每个姓名在这三列总共出现的次数,以及在每一列中的出现次数。请将"MeetItem"替换为你的表名,并根据实际情况修改列名。