我有一个下表计数率并把它添加到一个新的列
[Table_OrangeIsNewBlack]
ID | Name | Color | RedPercent
------------------------------------------
1 | Donald | Orange |
2 | Hillary | White |
3 | Barack | Black |
4 | Bernie | Grey |
1 | Donald | Red |
2 | Hillary | Red |
3 | Barack | Black |
4 | Bernie | Grey |
1 | Donald | Red |
2 | Hillary | Blue |
3 | Barack | Red |
4 | Bernie | Purple |
我需要增加一个百分比值呈现人怎么往往是“红”
Donald的记录
1 Donald Orange
1 Donald Red
1 Donald Red
RedPercent:(2/3)×100 = 66,66
希拉里
2 Hillary White
2 Hillary Red
2 Hillary Blue
'蓝色' 和 '紫色' 不计,从而:
RedPercent:(1/2)* 100 = 50,00
Barack
3 Barack Black
3 Barack Black
3 Barack Red
RedPercent:(1/3)×100 = 33,33
伯尼
4 Bernie Grey
4 Bernie Blue
4 Bernie Purple
'蓝色' 和 '紫色' 不计
RedPercent:(0/1) * 100 = 00,00
结果所需要的:
[Table_OrangeIsNewBlack]
ID | Name | Color | RedPercent
------------------------------------------
1 | Donald | Orange | 66,66
2 | Hillary | White | 50,00
3 | Barack | Black | 33,33
4 | Bernie | Grey | 00,00
1 | Donald | Red | 66,66
2 | Hillary | Red | 50,00
3 | Barack | Black | 33,33
4 | Bernie | Grey | 00,00
1 | Donald | Red | 66,66
2 | Hillary | Blue | 50,00
3 | Barack | Red | 33,33
4 | Bernie | Purple | 00,00
我已经试过:
;WITH CTE AS
(
SELECT ID,
-- Division: count of Reds/count of persons all rows
((SELECT COUNT(ID) FROM Table_OrangeIsNewBlack
WHERE Color = 'Red')
/
(SELECT COUNT(ID) FROM Table_OrangeIsNewBlack
WHERE (Color <> 'Blue' and
Color <> 'Purple'))
)
AS redprcnt
-- end of Division
FROM Table_OrangeIsNewBlack
)
UPDATE T1
SET RedPercent = CTE.redprcnt
FROM Table_OrangeIsNewBlack T1
INNER JOIN CTE ON(T1.ID = CTE.ID)
SELECT子句...
SELECT ID,
-- Division: count of Reds/count of persons all rows
((SELECT COUNT(ID) FROM Table_OrangeIsNewBlack
WHERE Color = 'Red')
/
(SELECT COUNT(ID) FROM Table_OrangeIsNewBlack
WHERE (Color <> 'Blue' and
Color <> 'Purple'))
)
AS redprcnt
-- end of Division
FROM Table_OrangeIsNewBlack
...只给出了redprcnt零
我应该用GROUP BY在某些时候?
有什么建议吗?
在此先感谢。
除以零遇到的错误。 警告:空值由集合或其他SET操作消除。如何避免被0除? – Kaptah
'NULLIF'需要2个参数。做了一个更正:'THEN ID END),0)AS redprcnt' – Kaptah
@Kaptah:当然,再次抱歉,修复了我的答案。 – dnoeth