1

私は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] をコンマ区切りの値「Branded Google, Branded Bing」として行数を増やす代わりに使用できると誰かが提案しました。

悲しいことに、彼らはそれ以上何も言わず、どの SQL コマンドを調べたらよいかわかりません! 誰でも助けることができますか?正しい方向に向けてくれる人が必要なだけです!

ありがとうございました!

4

1 に答える 1

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
于 2012-11-16T19:23:35.110 に答える