2012-02-25 2 views
-1

У меня есть таблица, как показано ниже для пакета и его ежемесячного подсчета, как ..SQL запросов за месяц мудрый подсчет

Package1 - 1 dollor на поиск - 50 запросов (в месяц), включенный в пакет и дополнительный поиск на месяц будет рассчитываться отдельно.

Я передаю данные в моей таблице как ..

пакет пользователя таблица содержит информацию о пакете пользователя с его детали.

UserpackageId Userid PackageId SearchPerMonth StartDatePackage EndDatePackage 
1    1   1    50   25/02/2012   25/02/2013 (1 YEAR) 

Detail стол

Userpackageid  SearchDate  SearchCost  
1     26/02/2012  1 Dollor 

Теперь я хочу, чтобы суммировать данные, как

поиск ежемесячный пакет счет - как я есть поиск в месяц 50 для этого пакета .. и если дополнительный счет бывает более 50, чем Покажет другой счет для дополнительного IN MONTHLY WISE ..

+5

Очень неясный вопрос, если честно с вами ... Попробуйте переписать его полностью. 1.Что у вас есть в качестве входных данных? 2.Что вы хотите в качестве вывода? 3. Как вы пытаетесь достичь своей цели? – Smarty

+0

Я хочу обобщить данные таблицы за месяц мудрый. Например. username xyz искал 34 сотрудника в течение первого месяца с момента его запуска (угадывая годовой пакет) - поэтому выше примерных данных имеется 50 доступных для него пакетов. Так что за каждый месяц он может искать 50, а если более 50, то я хочу, чтобы они подсчитывали отдельно , –

ответ

0

Я согласен с @Smarty, что ваш вопрос: довольно трудно читать, поэтому я должен буду сделать некоторые предположения относительно ваших требований.

Посмотрите, поможет ли это вам.

create table UserPackage(ID int identity(1,1), UserID int, PackageID int, 
    SearchPerMonth int, StartDate datetime, EndDate datetime) 
create table Detail(ID int identity(1,1), UserPackageID int, SearchDate datetime,Cost money) 

insert into UserPackage(UserID, PackageID, SearchPerMonth, StartDate, EndDate) 
    values(1,1,3,'2/15/12','2/15/13') 

insert into Detail(UserPackageID,SearchDate,Cost) values(1,'2/16/12',1) 
insert into Detail(UserPackageID,SearchDate,Cost) values(1,'2/17/12',2) 
insert into Detail(UserPackageID,SearchDate,Cost) values(1,'2/18/12',3) 
insert into Detail(UserPackageID,SearchDate,Cost) values(1,'2/19/12',4) 
insert into Detail(UserPackageID,SearchDate,Cost) values(1,'2/20/12',5) 

select 
    UserPackageID, 
    CostInLimit=sum(CostInLimit), 
    CostAboveLimit=sum(CostAboveLimit) 
from 
    (
    select 
     z.UserPackageID, 
     z.DetailID, 
     IsInLimit=case when z.RankInMonth > up.SearchPerMonth then 1 else 0 end, 
     CostInLimit=case when z.RankInMonth > up.SearchPerMonth then Cost else 0 end, 
     CostAboveLimit=case when z.RankInMonth > up.SearchPerMonth then 0 else Cost end, 
     z.Cost, 
     z.RankInMonth, 
     z.SearchDate 
    from 
     UserPackage up 
     inner join 
     (
      select 
       DetailID=ID, 
       UserPackageID, 
       Cost, 
       RankInMonth=RANK() OVER (PARTITION BY UserPackageID ORDER BY SearchDate), 
       SearchDate 
      from 
       Detail 
     ) z on z.UserPackageID = up.ID 
    ) y 
where 
    y.SearchDate between '2/15/12' and '3/15/12' 
group by 
    UserPackageID][1] 

Вот результат от внешнего выбора:

enter image description here

Вот результат от внутреннего выбора (таблица у самого по себе): enter image description here

+0

Привет, ваш запрос немного отличается. Стоимость поиска будет в таблице userpackage. И в вашем примере 3 поиска доступны в месяц, но он возвращает неверный результат. Для дополнительного поиска после первого поиска 3 он должен возвращать isinlimit = 0. Также, если я добавлю несколько записей поиска за другие месяцы в этом году, тогда - он должен работать соответственно для эти месяцы. Спасибо за ваш ответ. Не могли бы вы дать некоторые изменения, чтобы помочь мне. –

+0

Также я хочу данные за целый год со счетом. Основная проблема, которую я получаю, когда я разбиваю на каждый месяц за этот год. –

Смежные вопросы