0

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

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

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

IE

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)

IE

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

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

1  / 2  = 50.00%

我怎么做?带有 ???? 的列 是我被困的地方。

谢谢!冬青

4

2 回答 2

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  

希望这会有所帮助......
埃尔默

于 2013-05-22T06:11:31.780 回答
0

你听起来真的很困惑 - 出于我的好心,我对此进行了抨击。如果这不正确,您需要发布更多关于您需要什么的信息。

一个。您的示例查询不正确(由于缺少它们会出错GROUP BY

湾。您的样本数据不完整。在第一步中,您的数据似乎表明您希望按 Girl 和 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
于 2013-05-22T01:46:52.670 回答