Sql server 如何计算日期范围

Sql server 如何计算日期范围,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,好的,这个编码片段——TAT——对你来说可能很简单,但我正在为此绞尽脑汁 这将返回每个女孩的玩具数量 Select Toys, Count(Girls), TAT from Table1 (nolock) i、 e 这将返回每个年龄段的玩具数量 Select TAT, Count(TAT) from Table1 (nolock) i、 e 我需要做的下一步是将1(16-30岁的凯利)除以它放入的年龄范围内的玩具(16-30岁的凯利为2): 我该怎么做?带???的列????这就是我被困的地方

好的,这个编码片段——TAT——对你来说可能很简单,但我正在为此绞尽脑汁

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

Select Toys,
Count(Girls),
TAT
from Table1 (nolock)
i、 e

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

Select TAT,
Count(TAT)
from Table1 (nolock)
i、 e

我需要做的下一步是将1(16-30岁的凯利)除以它放入的年龄范围内的玩具(16-30岁的凯利为2):

我该怎么做?带???的列????这就是我被困的地方

谢谢大家!!
霍莉

你听起来真的很困惑——出于我的好心,我试了一下。如果这是不正确的,你需要发布更多关于你到底需要什么的信息

a。您的示例查询不正确(由于缺少
分组依据
,它们将出错)

b。您的样本数据不完整。在第一步中,您的数据似乎表明您希望按女孩和TAT分组,但您明确表示您的查询是按每个女孩计算玩具,而不是按每个女孩/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
希望这有助于……

Elmer

UGH-我希望你能理解,因为这不是我设计的……你能给出完整的预期结果表吗?对于这个-基本上显示每个玩具的百分比在每个日期范围内。不要担心帖子-只看摘要…我知道它不会在精确的布局中,但这只是离我需要的更近了一步…在摘要中-我只需要做垂直列…J Lo…我很抱歉我遗漏了分组。我今天在工作中不得不为几个存储过程(与此无关)硬编码许多列……我真不敢相信我这么做了。我一定会试试你的示例代码,看看结果如何。我会让你知道的。非常感谢。我保证在测试完这个代码后我会解释得更好。J Lo,有一个问题…我从来没有听说过SQL,你能给我解释一下它的功能吗?再次非常感谢。它被称为公共表表达式。快速问题:如何将%转换为50.00%,而不是0.5?非常感谢。事实上,我算出了:)转换(十进制(6,2),转换(gtc.ToyCount as float)*100/转换(tar.ToyCount as float))为[%]Elmer-现在也会尝试你的:)并让你知道!这在存储过程之外起作用。JLo的代码在存储过程中工作:)
TAT          ??????
_____        ___________
0-5             1
6-10            0
11-15           1
16-30           2
31+             1
1  / 2  = 50.00%
;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
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