Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server中的总列值计算每行的百分比值_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

根据SQL Server中的总列值计算每行的百分比值

根据SQL Server中的总列值计算每行的百分比值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张像下面这样的桌子。我需要根据总列值计算每行的百分比值。如何通过SQL查询实现这一点 我期待这样的结果: 请查找下面的简单计算以获得结果 (100 / 1000) * 100 = 10 对于第一个值 (row value / grand total) * 100 你能帮我用SQL查询第一行的值得到10吗?提前谢谢 您可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比 SELECT Region, Cost, 10

我有一张像下面这样的桌子。我需要根据总列值计算每行的百分比值。如何通过SQL查询实现这一点

我期待这样的结果:

请查找下面的简单计算以获得结果

(100 / 1000) * 100 = 10
对于第一个值

(row value / grand total) * 100
你能帮我用SQL查询第一行的值得到10吗?提前谢谢

您可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比

SELECT
    Region,
    Cost,
    100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable
请注意,您还可以使用非相关子查询来查找总成本,例如

(SELECT SUM(Cost) FROM yourTable)
但是我给你的第一个版本可能会比它更好,如果没有其他原因的话,它只需要运行一个查询

输出:

此处演示:

更新:

对于您更新的查询,我可能会使用以下内容:

WITH cte AS (
    SELECT
        Region,
        SUM(Cost) AS sum_cost
    FROM yourTable
    GROUP BY Region
)

SELECT
    Region,
    sum_cost,
    100 * sum_cost / SUM(sum_cost) OVER () AS Percentage
FROM cte;
可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比

SELECT
    Region,
    Cost,
    100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable
请注意,您还可以使用非相关子查询来查找总成本,例如

(SELECT SUM(Cost) FROM yourTable)
但是我给你的第一个版本可能会比它更好,如果没有其他原因的话,它只需要运行一个查询

输出:

此处演示:

更新:

对于您更新的查询,我可能会使用以下内容:

WITH cte AS (
    SELECT
        Region,
        SUM(Cost) AS sum_cost
    FROM yourTable
    GROUP BY Region
)

SELECT
    Region,
    sum_cost,
    100 * sum_cost / SUM(sum_cost) OVER () AS Percentage
FROM cte;

您可以通过下面的查询得到一个结果

;with Sales(region,cost,Total)
    as
    (
    select region,cost,
    (sum(cost) over()) as Total
    from YourTable
    )
    Select Region,Cost,convert(numeric(18,0),Cost/1000*100) as Per from sales

您可以通过下面的查询得到一个结果

;with Sales(region,cost,Total)
    as
    (
    select region,cost,
    (sum(cost) over()) as Total
    from YourTable
    )
    Select Region,Cost,convert(numeric(18,0),Cost/1000*100) as Per from sales

您可以使用交叉联接来联接总成本值。然后使用此值计算百分比,如:。。。交叉连接从mytable中选择SUMcost,因为T-SQL中的100/1000是一个整数除法,将导致值为0。您需要使用十进制值来获得分数结果,例如100.0/1000.0…..您可以使用交叉联接来联接总成本值。然后使用此值计算百分比,如:。。。交叉连接从mytable中选择SUMcost,因为T-SQL中的100/1000是一个整数除法,将导致值为0。您需要使用十进制值来获得分数结果,例如100.0/1000.0…..上述查询工作正常。如果我添加GROUPBY子句,它将抛出一些异常。从表中选择Region,Cost,100*Cost/SUMCost OVER作为百分比,按区域分组,按成本,如何使用group by子句实现这一点。这是您想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。这是你想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。上面的查询符合我的期望。如果我的表有冗余区域值,如何通过下面的查询在不获取冗余值的情况下实现相同的值。从表组中按区域选择Region,Cost,100*Cost/SUMCost OVER AS Percentage(区域、成本、100*Cost/SUMCost OVER AS Percentage)。使用其他数据更新此问题或只询问一个新问题。上述查询工作正常。如果我添加GROUPBY子句,它将抛出一些异常。从表中选择Region,Cost,100*Cost/SUMCost OVER作为百分比,按区域分组,按成本,如何使用group by子句实现这一点。这是您想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。这是你想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。上面的查询符合我的期望。如果我的表有冗余区域值,如何通过下面的查询在不获取冗余值的情况下实现相同的值。从表组中按地区选择地区、成本、100*成本/总成本百分比。使用其他数据更新此问题或只询问新问题。