是否可以从相同的表日期记录中获得如下结果:
Enrolled Enrolled as Email Enrolled as Text Deals Redeemed
<First Date> 7 5 2 6
<Next Date> 9 3 6 14
表结构如下所示:
Customer_id, field1, field2, responsecode, created_date
我当前的查询是这样的:
Select
Created,
Enroll = (Select COUNT(*) from tblCustomer where field1 <> '' group by created),
Email = (Select COUNT(field1) from tblCustomer where field1 = 'E-mail' and field1 <> '' group by created),
Cell = (Select COUNT(*) from tblCustomer where field1 = 'Cell Phone' and field1 <> '' group by created)
from tblCustomer
group by created
order by created
答案 0 :(得分:3)
你不想要一个COUNT(),而是一个SUM(CASE / WHEN)
Select
Created,
count(*) TotalCnt,
SUM( CASE WHEN Field1 = 'E-mail' then 1 else 0 END ) as EMailCnt,
SUM( CASE WHEN Field1 = 'Cell Phone' then 1 else 0 END ) as CellCnt,
SUM( CASE WHEN RedeamedCondition then 1 else 0 END ) as RedeamCnt
from
tblCustomer
group by
created
order by
created
注意......如果创建日期/时间,则需要根据&#34;创建&#34;的日期部分来获取组,否则您将获得每秒不同的计数。从另一篇文章中,以下内容仅通过基本删除小时数来获取日期时间的日期部分:分钟:秒部分
DATEADD(dd, 0, DATEDIFF(dd, 0, created))
或者如果这没有意义,你可以通过
来做datepart( yy, created) as GrpYear,
datepart( mm, created) as GrpMonth,
datepart( dd, created) as GrpDay, ... rest of columns.....
答案 1 :(得分:2)
尝试:
select created_date,
count(field1) Enrolled,
count(case field1 when 'E-mail' then 1 end) Enrolled_as_Email,
count(case field1 when 'Cell Phone' then 1 end) Enrolled_as_Cell,
(Select COUNT(*)
from tbl_TransactionDishout d
where d.created = c.created_date and
d.DishoutResponseCode = '0000') Deals_Redeemed
from tblCustomer c
group by created_date
order by created_date