Sql server 如何计算日期范围
好的,这个编码片段——TAT——对你来说可能很简单,但我正在为此绞尽脑汁 这将返回每个女孩的玩具数量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): 我该怎么做?带???的列????这就是我被困的地方
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
希望这有助于……ElmerUGH-我希望你能理解,因为这不是我设计的……你能给出完整的预期结果表吗?对于这个-基本上显示每个玩具的百分比在每个日期范围内。不要担心帖子-只看摘要…我知道它不会在精确的布局中,但这只是离我需要的更近了一步…在摘要中-我只需要做垂直列…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