我对SQL很新,但很想学习(使用SQL服务器)。
我的数据表有:
[关键字],[来源],[访问]列
关键字列具有重复值。
[关键字]
中的值示例google
google analytics
how to use google analytics
bing
bing vs google
我的KeywordDefinition表有:
[Keyword Branded ID] [Keyword Branded Group]
google branded google
bing branded bing
关键字列只有唯一值,因此这是关键。
我正在使用LEFT OUTER JOIN将[Keyword Branded Group]插入到我的数据表中,该表实际上会根据是否与google或bing匹配为每个关键字指定一个标签。
SELECT
ISNULL(c1.[Keyword Branded Group],'Other Branded') AS [Keyword Branded Group],
a.*
FROM [mychoice-data-b9BwZvd] a
LEFT OUTER JOIN [mychoice-keyworddims] c1 ON a.[Keyword] LIKE '%'+ c1.[Keyword Branded ID] +'%'
但是,我的问题是,根据“bing vs google”匹配Google和Bing的事实,这会产生额外的行。无论如何,这是我的理解。
有人建议我可以在数据表中保留原始行数,并将新列[Keyword Branded Group]作为逗号分隔值'品牌Google,品牌Bing',而不是以更多行结束。
可悲的是,他们没有说更多,我不知道要查找哪些SQL命令!有人可以帮忙吗?我只需要有人指出我正确的方向!
谢谢!
答案 0 :(得分:1)
我能想到的最好方法是将外连接移动到UDF中。首先创建一个像
这样的函数CREATE FUNCTION dbo.GetAllKeywords (@Keyword varchar(max)) RETURNS varchar(max)
AS BEGIN
DECLARE @return varchar(max)
SET @return = ''
SELECT @return = @return + ',' + [Keyword Branded Group]
FROM KeywordDefinition
WHERE @Keyword LIKE '%'+ [Keyword Branded ID] +'%'
IF (LEN(@return) > 2)
RETURN substring(@return, 2, len(@return) - 2)
ELSE
RETURN 'Other Branded'
END
然后你可以将UDF作为子查询放入:
SELECT dbo.GetAllKeywords(a.Keyword), a.*
FROM [mychoice-data-b9BwZvd] a