Sql 将一行除以整列总和
我需要将一个行值(在我的例子中为单位)除以整行总和,得到一个百分比(单位列)。有人能帮我吗?下面是代码和代码的数据结果Sql 将一行除以整列总和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要将一个行值(在我的例子中为单位)除以整行总和,得到一个百分比(单位列)。有人能帮我吗?下面是代码和代码的数据结果 select db.ManufAbbrName Manufacturer, db.ProdName ProductName, sum(wk.Units) Units, wk.RecordDate RecordDate from MDDB db join wkdata wk on db.NDC = wk.NDC
select db.ManufAbbrName Manufacturer,
db.ProdName ProductName,
sum(wk.Units) Units,
wk.RecordDate RecordDate
from MDDB db
join wkdata wk
on db.NDC = wk.NDC11
join @NDCs nd
on nd.NDCs = wk.NDC11
where wk.RecordDate between @StartDate and @EndDate
group by db.ManufAbbrName,
db.ProdName,
wk.RecordDate
结果集:
Example1 CLOBETASOL PROPIONATE EMO 264475 2013-11-01 00:00:00.000
Example2 CLOBETASOL PROPIONATE 187371 2013-11-01 00:00:00.000
Example3 OLUX-E 82154 2013-11-01 00:00:00.000
所以我需要得到第1行中每个制造商第3列的百分比值。所以对于第一个,264475/534000查看
OVER
子句。这是一篇关于它的文章
一个小例子
DECLARE @t TABLE (group_id CHAR(1), value INT)
INSERT INTO @t (group_id, value)
VALUES ('A', 5),('A', 5), ('A', 5),('B', 5),('B', 5)
SELECT group_id, value, group_total, rate = CASE WHEN group_total = 0 THEN 0 ELSE (1.0*value) / (1.0*group_total) END
FROM (
SELECT group_id, value, group_total = SUM(value) OVER(PARTITION BY group_id)
FROM @t
) t
您要查找的是(x分区)上的
和(y)
用法。
您可以执行以下操作:
SELECT group_id
, value
, SUM(value) OVER(PARTITION BY group_id)
, CASE WHEN SUM(value) OVER(PARTITION BY group_id) = 0 THEN 0
ELSE (1.0*value) / (1.0*SUM(value) OVER(PARTITION BY group_id)) END as Rate
FROM t
**谢谢!另外,您可以在分区函数中输入多个值吗?@user1049984 Yes just list
partitionby Col1,Col2