我在一个表中有一个列,其中包含如下所示的数据
橘子
苹果
橘子、苹果
芒果
我需要找到发生的事和水果的名称,并在两列中返回输出
橙子-橙子(2)
苹果-苹果(2)
芒果-芒果(1)
是否可以将like和count函数结合起来得到所需的结果。
最佳答案
SQL Server 2016支持STRING_SPLIT如果您的版本低于2016,您可以尝试编写一个split函数,通过,
CREATE FUNCTION fn_split ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
然后使用
CROSS APPLY
按名称获取count
。SELECT Name,count(*)
FROM T t1 CROSS APPLY fn_split(t1.col) v
group by Name
sqlfiddle