好的,这个编码片 - 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%
我该怎么做?列与????是我被困在哪里。
谢谢! 冬青
答案 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
希望这有助于...
埃尔默