如何计算日期范围

时间:2013-05-21 21:13:22

标签: sql-server sql-server-2008-r2

好的,这个编码片 - TAT - 对你来说可能很简单,但我正在为此而努力。

这会返回每个女孩的玩具数量

Select Toys,
Count(Girls),
TAT
from Table1 (nolock)

即。

Girl       Toys           TAT
_____      ______         ___________

Kelly       1              0-5
Michelle    1              16-30
Grace       1              31+
Katy        1              6-10
Kelly       1              16-30

返回每个年龄段的玩具数量

Select TAT,
Count(TAT)
from Table1 (nolock)

TAT          ??????
_____        ___________
0-5             1
6-10            0
11-15           1
16-30           2
31+             1

我需要做的下一步是将玩具年龄范围内的#玩具除以1(Kelly为16-30)(2到16-30):

1  / 2  = 50.00%

我该怎么做?列与????是我被困在哪里。

谢谢! 冬青

2 个答案:

答案 0 :(得分:0)

你听起来真的很困惑 - 出于我心中的善良,我对此进行了一次刺痛。如果这不正确,您需要发布有关您需要的更多信息。

一个。您的示例查询不正确(由于缺少GROUP BY而导致错误)

湾您的样本数据不完整。在第一步中,您的数据似乎表明您想按照Girl和TAT进行分组,但您明确表示您的查询是按照每个女孩计算玩具 - 而不是每个Girl / TAT对的玩具。哪个是对的?

“显示每个日期范围内每个玩具的百分比”。当样本数据不完整时,这不是那么简单

;WITH GirlTATCount AS (
  SELECT
    Girl,
    TAT,
    COUNT(*) as [ToyCount]
  FROM Table1
  GROUP BY Girl, TAT
)
, ToysInAgeRange AS (
  SELECT
    TAT,
    COUNT(*) as [ToyCount]
  FROM Table1
  GROUP BY TAT
)
SELECT
  gtc.Girl,
  gtc.TAT,
  gtc.ToyCount,
  CAST(gtc.ToyCount as float) / CAST(tar.ToyCount as float) as [%]
FROM GirlTATCount gtc
JOIN ToysInAgeRange tar
  ON tar.TAT = gtc.TAT

答案 1 :(得分:0)

create table #table1 (Girl varchar(20), toys int, tat varchar(10))  
insert into #table1 (Girl, toys, tat)  
 values ('Kelly',1,'0-5')  
,('Michelle',1,'16-30')  
,('Grace',1,'31+')  
,('Katy',1,'6-10')  
,('Kelly',1,'16-30')  

declare @dividend numeric(5,2) = 1  
;with gtcount as (select tat, COUNT(*) ctr  
                  from #table1  
                  group by tat )  
select tat,ctr, @dividend/ctr percentage from gtcount  

希望这有助于...
埃尔默