2012-02-29 79 views
0

是否有可能从同一个表得到的结果如下日期明智记录:多个子查询

   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

什么是你的数据库/表结构? – 2012-02-29 10:30:59

+0

桌子是什么样的?没有相关信息的人应该如何回答这个问题? – 2012-02-29 10:31:46

+0

请详细说明。你是指含有日期的记录吗?或者是其他东西? – 2012-02-29 10:32:46

回答

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 
+0

它给我相同的行用于所有日期... – 2012-02-29 11:08:44

+0

@VishalSuthar:现在怎么样? – 2012-02-29 11:13:50

+0

请检查我的问题..我已通过添加我目前的查询不起作用来更新它。 – 2012-02-29 11:17:25

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 

注意......如果创建一个日期/时间,您将需要有组通过仅基于“已创建”的日期部分,否则每秒会得到不同的计数...从另一篇文章中,通过基本上删除小时,以下仅获取日期时间的日期部分:分钟:秒部分

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.....