仅显示具有不同点类型的帐号

时间:2012-11-16 21:03:29

标签: mysql sql database sql-server-2008

我会尽力解释我被要求做的事情。

假设我们有开发人员访问DataBase A ,里面有很多表,但我们最关心的是两个表。第一个称为帐户,第二个称为广告系列。现在,在Campaign表格中我们有很多字段,但最重要的是 CampaignTypeID AccountID

帐户表中,最重要的字段是 AccountID CustomerNumber 。在帐户表中,我们有许多参与不同广告系列的客户;因此,我们可以说单个客户可以在其帐户下拥有许多不同的CampaignTypeID。

现在我要求做的是:为每个CampaignTypeID显示一个CustomerNumber (总共5种类型)。 (我认为可以接受重复的CustomerNumbers) (实施例)

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。然后我会将其中的每一个复制到电子表格中。我上面展示的只是一个例子,但我必须做的事实上有40个不同的CampaignTypeID。这是一项非常繁琐的工作,我知道可以提高效率。

如果可能的话,我想知道一种更有效的方法来完成这项任务。

谢谢!

更新:好的,我应该添加一件小事。 CampaignTypeID不是顺序的,它们更像是5,6,7,8,9,10,50,65,110,250,1104,1114。这会复杂吗?

SCHEMA

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);

1 个答案:

答案 0 :(得分:0)

Select
  CampaignTypeID,
  Min(CustomerNumber)
From
  A.Account a
    Inner Join
  A.Campaign c
    On a.AccountID = c.AccountID
Where
  CampaignTypeID Between 1 And 5
Group By
  CampaignTypeID