1

まとめている表に競合他社の名前をリストするために使用されている列があります。現在、これらの入力がどのように行われるかをあまり制御できず、深刻な頭痛の種になっています。データ全体にランダムなスペースとスペルミスがありますが、競合他社ごとにデータをリストする必要があります.

例として(私が使用している実際のSQLではありません)、競合他社のリスト:

Price Cutter
PriceCutter
PriceCuter
Price Cuter

クエリを実行した場合:

SELECT Competitor_Name, SUM(Their_Sales),
FROM Cmdata.Competitors
Where Their_Sales
Between 10000 AND 100000000
Group by Competitor_Name

Price Cutter のバージョンごとに異なるエントリが表示されますが、これは明らかに避けたいことです。

この問題はよく出てくると思いますが、Google 検索を行ったところ、問題が解決されませんでした。認めますが、質問を一言で説明するのはちょっと難しいです。それかこれはとても基本的なことなので、私はすでに知っているはずです...

(追伸 - はい、ドロップダウン メニューに移行しますが、しばらく時間がかかります。それまでの間、解決策はありますか?)

4

3 に答える 3

1

Competitor各競合他社の標準名を持つテーブルを追加する必要があります。

次に、他のテーブルで外部キー参照を使用します。

あなたが直面している問題は、データ クレンジングとデータ モデリングの問題です。解決するのは特に難しいことではありませんが、かなりの量の作業が必要です。現在のすべてのスペルのリストを取得して標準化することから始めることができます (おそらく Excel スプレッドシートで)。

これを行うと、ルックアップ テーブルを作成し、値を参照して値を変更できます。

ただし、中期的には、Competitorテーブルを作成し、アプリケーションが必要とする方法でデータをモデル化する必要があります。

于 2012-12-07T22:01:04.310 に答える
1

これは一般的に非常に難しい問題です。データベースがサポートしている場合はSOUNDEX(Competitor_Name)、 だけでなく でグループ化してみてくださいCompetitor_Name

実際には、列は生のテキスト フィールドではなく、テーブルCompetitor_Nameへの外部キーである必要があります。Competitors

修正するために何をするにしても、将来この種のフープジャンプを行う必要がないように、テーブルも更新する必要があります。

于 2012-12-07T22:01:21.857 に答える
1

(私は構文について少しぼんやりしていますが、これは近いです)

alter table Competitors add column cleanedName (varchar(100));

update Competitors set cleanedName = Replace(Upper(Competitor_Name), ' ', '')

次に、Competitor_Name の代わりにcleanedName でグループ化します

于 2012-12-07T22:03:37.670 に答える