SQL Server : percentage calculation with new records as output

标签 sql sql-server

我有下表作为 SQL 查询的输出

ID  Car Type    Units Sold
---------------------------
1   Sedan       250
2   SUV         125
3   Total       375

我想要一个 SQL 查询/过程来生成以下输出

ID  Car Type    Units Sold
--------------------------
1   Sedan       250
2   SUV         125
3   Total       375
4   Sedan_Pct   66.67 (250/375)
5   SUV_Pct     33.33  (125/375)

请注意,汽车类型将来将会增加,我希望每种汽车类型的百分比应以“_Pct”形式附加到当前表中。

最佳答案

通常,我们可能希望将百分比视为单独的列,而不是单独的行。话虽这么说,我们可以使用 SQL Server 中的分组集生成您想要的输出:

WITH cte AS (
    SELECT ID, CarType, SUM (UnitsSold) AS UnitsSold
    FROM yourTable
    GROUP BY 
        GROUPING SETS((ID, CarType), (CarType), ())
)

SELECT
    ID,
    COALECSE(CarType, 'Total') AS CarType,
    CASE WHEN ID IS NOT NULL OR CarType IS NULL
         THEN UnitsSold
         ELSE 100.0 * UnitsSold /
             SUM(CASE WHEN ID IS NOT NULL THEN UnitsSold END) OVER () END AS PctUnitsSold
FROM cte
ORDER BY
    ID DESC,
    CASE WHEN CarType IS NULL THEN 0 ELSE 0 END,
    CarType;

enter image description here

Demo

关于SQL Server : percentage calculation with new records as output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028556/

相关文章:

sql - 如何管理 SQL 源代码?

sql - 行为取决于 sql server 版本

sql - 取回已删除的记录

sql-server - SQL Server 闩锁及其对性能问题的指示

c# - 列数导入不一致的 SSIS 任务?

SQL Server : Find records where XML is missing tag

sql - 在 Derby 中一次更新多个列

sql - 如何在 SQL SERVER 中仅提取电子邮件 ID

php - MS SQL CONCAT 与 "+"查询差异(使用 Doctrine 2)

mysql - SQL Where 子句中的 If/Else