2012-02-25 60 views
-1

我有表如下程序包和每月數,如..SQL查詢的月份明智數

Package1 - 每搜索1美金 - 50個搜索(每月)包含在一個月包和額外的搜索將另算。

我在我的表像傳遞數據..

用戶包表有其詳細的用戶的軟件包信息。

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

詳細表

Userpackageid  SearchDate  SearchCost  
1     26/02/2012  1 Dollor 

現在我想總結像

包月套餐搜索統計數據 - 因爲我有每月50搜索該包..如果額外的數發生超過50比它會顯示其他計數額外在每月智慧..

+5

很不清楚的問題,說實話與你...嘗試完全重寫它。你有什麼輸入? 2.你想作爲輸出?你如何試圖達到你的目標? – Smarty 2012-02-25 12:13:42

+0

我想總結上表的數據月明智..對於前。用戶名xyz從他的軟件包開始時開始搜索34名員工(猜測每年的軟件包) - 上面的例子數據有50個搜索可用於他的軟件包..所以每個月他可以搜索50,如果超過50,那麼我希望單獨計數。 – 2012-02-25 16:18: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

這裏的(自身數據表Y)從內部選擇的結果: enter image description here

+0

嗨,你的查詢有點不同。每次搜索的費用將在用戶數據包表中。在你的例子中,每月有3次搜索,但是它返回的結果不正確。在第3次搜索之後進行額外的搜索,它應該返回isinlimit = 0.另外,如果我在該年的其他月份添加一些搜索記錄,那麼 - 它應該相應地工作那幾個月也是如此。感謝您的回覆..您可以請進行一些更改,以幫助我。 – 2012-02-25 17:05:46

+0

另外我想整個一年的數據與計數。主要問題當我爲那一年的每個月進行分區時,我正在那裏。 – 2012-02-25 17:13:28