Несколько подзапросов - PullRequest
0 голосов
/ 29 февраля 2012

Можно ли получить результат, как показано ниже, из той же таблицы с указанием даты:

               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

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Вам не нужен COUNT (), но вместо этого СУММА (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.....
2 голосов
/ 29 февраля 2012

Попробуйте:

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