好了,这段代码-- 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(16-30岁的Kelly)除以它放入的年龄范围内的玩具数量(16-30岁的2):
1 / 2 = 50.00%我该怎么做?带有?的列就是我被困的地方。
谢谢!冬青
发布于 2013-05-22 14:11:32
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 希望这能帮到你。
埃尔默
发布于 2013-05-22 09:46:53
你听起来真的很困惑--出于好心,我试了试。如果这是不正确的,你需要发布更多关于你到底需要什么的信息。
a.您的示例查询不正确(由于缺少GROUP BY,它们将出错)
b.您的样本数据不完整。在第一步中,您的数据似乎表明您希望按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.TAThttps://stackoverflow.com/questions/16679576
复制相似问题