Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将一行除以整列总和_Sql_Sql Server_Tsql - Fatal编程技术网

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