我有两个表格,一个是
以下是示例:
我可以使用这个查询来获取三月份注册用户的数量:
Customer
,另一个是Contacts
。
Companies
表格包含客户的信息,当向客户发送电子邮件时,在Contacts
表格中创建一个联系人,其中包含有关发送的电子邮件类型和时间的信息。以下是示例:
Companies: Contacts:
------------------------ ----------------------------------------------
ID | Action ID | CompanyID | CreatedON | EmailType
----- | ---------------------- ----- | ---------- | --------- | ---------
Cus1 | 07.03.2014 Registered Con1 | Cus1 | 07.03.2014 | NewsLetter
Cus2 | 08.03.2014 UnSubscribe Con2 | Cus2 | 07.03.2014 | NewsLetter
Cus3 | 10.03.2014 Order Con3 | Cus3 | 10.03.2014 | NewsLetter
Cus4 | 10.03.2014 Registered Con4 | Cus4 | 10.03.2014 | NewsLetter
Cus5 | NULL Con5 | Cus5 | 14.03.2014 | NewsLetter
Cus6 | 15.03.2014 UnSubscribe Con6 | Cus6 | 14.03.2014 | NewsLetter
Cus7 | NULL Con7 | Cus7 | 17.03.2014 | NewsLetter
Cus8 | NULL Con8 | Cus8 | 17.03.2014 | NewsLetter
Cus9 | NULL Con9 | Cus9 | 17.03.2014 | NewsLetter
我希望您能为我提供一份查询,以便我可以在特定日期查看发送了多少封电子邮件以及有多少客户进行了注册、取消订阅或预订订单。
例如,当我运行以下查询时,可以根据日期获取三月份发送的电子邮件数量:
Select Left(convert(date, CreatedON, 105),12) AS DATE_Sent,
count ( CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, CreatedON))) ) as Alle
From Contacts
Where Contacts.Comment Like 'Newsletter' and
( CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, CreatedON))) >= '01.03.2014' and
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, CreatedON))) <= '30.03.2014')
Group by Left(convert(date, CreatedON, 105),12)
Order by DATE_Sent
我可以使用这个查询来获取三月份注册用户的数量:
SELECT Count(Companies.ID) as NumOfRegistered
FROM Companies, Contacts
Where Companies.ID = Contacts.CompanyID and Contacts.Comment Like 'Newsletter' And
( Companies.Action Like '%Registered%') And
(Right(Companies.Action, 10) Like '%03.2014'
Group By Right(Companies.Action, 10)
同样的方式,我可以获得在三月份取消订阅或下单的用户。
我正在获取单个结果,不知道如何将这些小查询组合起来,以便我可以按日期查看所有结果。任何帮助都将不胜感激。我期望该查询能够给出以下结果:
Date | Alle | Registered | Unsubscribe | Order |
---------- ---- ---------- ---------- -----
07.03.2014 | 2 | 1 | NULL | NULL
10.03.2014 | 2 | 1 | NULL | 1
14.03.2014 | 2 | NULL | NULL | NULL
17.03.2014 | 3 | NULL | NULL | NULL
Null
,而是将其替换为0
。据我所知,你无法避免这种情况,因为第三个查询的结果是前两个查询的联合,并且这两个查询具有不同的日期,因此当你进行union
操作时,对于那些没有数据的date
的结果将会是0
。 - Siva