頼まれたことをできる限り説明しようと思います。
内部に多くのテーブルがあるDataBase Aへの開発者アクセス権があるとしますが、主に 2 つのテーブルに関心があるとします。1 つ目はAccountsと呼ばれ、2 つ目はCampaignと呼ばれます。さて、Campaign テーブル内には多くのフィールドがありますが、最も重要なのはCampaignTypeIDとAccountID です。
Accountsテーブル内で最も重要なフィールドは、AccountIDとCustomerNumberです。Accountsテーブルには、さまざまなキャンペーンに参加した多くの顧客がいます。したがって、1 人の顧客がそのアカウントでさまざまな CampaignTypeID を持つことができると言えます。
ここで私に求められたのは、CampaignTypeID ごとに 1 つの CustomerNumber (合計 5 種類) を表示することです。(CustomerNumber の重複は許容されると思います) (Ex.)
CampaignTypeID CustomerNumber
1 34535
2 23525
3 23423
4 52355
5 23525
これは私が使用したクエリです:
SELECT top 5 CustomerNumber[Customer Number], CampaignTypeID ,
FROM A.Account a
JOIN A.Campaign c ON a.AccountID = c.AccountID
WHERE CampaignTypeID IN (5)
GROUP BY CustomerNumber, CampaignTypeID
このクエリの結果は次のようになります: (例)
CampaignTypeID CustomerNumber
5 34535
5 23525
5 23423
5 52355
5 23525
最初は、すべての CampaignTypeID を WHERE 句に挿入しましたが、それでは、繰り返される CampaignTypeID しか返されませんでした。(元。)
CampaignTypeID CustomerNumber
3 34535
3 23525
4 23423
5 52355
5 56678
3 23525
この時点でわかるように、私の唯一のオプションは、各 CampaignTypeID を 1 つずつ入力することでした。次に、それらをそれぞれスプレッドシートにコピーします。上で示したのは一例ですが、実際には 40 の異なる CampaignTypeID が必要でした。それは非常に退屈な仕事でしたが、もっと効率的にすることができると私は知っています。
可能であれば、このタスクを完了するためのより効率的な方法を知りたいです。
ありがとう!
更新:さて、追加する必要があった小さなこと。CampaignTypeID は連続したものではなく、5、6、7、8、9、10、50、65、110、250、1104、1114 のようなものです。これは物事を複雑にしますか?
スキーマ
CREATE TABLE Accounts
(
AccountID int auto_increment primary key,
CustomerID int(20)NOT NULL
);
INSERT INTO Accounts
(CustomerID)
VALUES
(24),(22),(35),(256),(1246),(11),(224),(55),(664),(773),(234),(568),(245),(986),(768);
CREATE TABLE Campaign
(
CampaignID int auto_increment primary key,
CampaignTypeID int(20) NOT NULL,
CONSTRAINT fk_AccountID FOREIGN KEY(AccountID)
REFERENCES Accounts(AccountID)
);
INSERT INTO Campaign
(CampaignTypeID)
VALUES
(6),(7),(8),(9),(10),(245),(1140),(1150),(1160),(1170),(1180),(1190),(1240),(1250),(1260);