【问题标题】:Calculate percentage of revenue per month计算每月收入的百分比
【发布时间】:2016-05-14 03:37:46
【问题描述】:

我有以下基础数据:

+-------+-------+---------------+
| Order | Month | sqft produced |
+-------+-------+---------------+
|  1001 |     4 | 10.29         |
|  1001 |     6 | 4'367.66      |
|  1001 |     7 | 203.57        |
|  1001 |     8 | 294.61        |
|  1001 |     9 | 92.28         |
|  1001 |    10 | 34.47         |
|  1001 |    12 | 16.59         |
|  1002 |     1 | 1.74          |
|  1002 |     4 | 19.54         |
|  1002 |     7 | 5'552.21      |
|  1002 |     9 | 309.62        |
|  1002 |    10 | 24.15         |
|  1002 |    12 | 52.16         |
|  1003 |     5 | 807.45        |
+-------+-------+---------------+

这是三个订单,我想根据每个月生产的平方英尺百分比来分配收入。

收入表:

+-------+-----------+
| Order |  Revenue  |
+-------+-----------+
|  1001 | 1'135'465 |
|  1002 | 1'773'499 |
|  1003 | 172'633   |
+-------+-----------+

所以查询的输出应该是这样的:

+-------+-------+------------------+
| Order | Month | Revenue produced |
+-------+-------+------------------+
|  1001 |     4 | 2'327.72         |
|  1001 |     6 | 988'017.67       |
|  1001 |     7 | 46'050.00        |
|  1001 |     8 | 66'644.36        |
|  1001 |     9 | 20'874.86        |
|  1001 |    10 | 7'797.53         |
|  1001 |    12 | 3'752.86         |
|  1002 |     1 | 517.82           |
|  1002 |     4 | 5'815.02         |
|  1002 |     7 | 1'652'314.97     |
|  1002 |     9 | 92'141.64        |
|  1002 |    10 | 7'186.94         |
|  1002 |    12 | 15'522.60        |
|  1003 |     5 | 172'633.00       |
+-------+-------+------------------+

我正在努力寻找一种以这种格式获取基础数据的方法,因为我似乎无法按月拆分它。

【问题讨论】:

    标签: sql sql-server sql-server-2012 sum percentage


    【解决方案1】:

    让我们调用第一个表sqft 和第二个revenues。为避免保留字,第一个表列的名称将是:

    order_id, month_num, sqft_produced
    

    第二个:

    order_id, total_revenue
    

    你需要的 SQL 是这样的(这是针对 Oracle 的):

    SELECT order_id, month_num, (sqft_produced / total_sqft * total_revenue) revenue_produced
    FROM sqft INNER JOIN
    (SELECT order_id, total_sqft, total_revenue FROM (
    (SELECT order_id, sum(sqft_produced) total_sqft
    GROUP BY order_id) sqfts INNER JOIN revenues ON sqfts.order_id = revenues.order_id)) totals
    ON sqft.order_id = totals.order_id;
    

    一步一步:

    SELECT order_id, sum(sqft_produced) total_sqft
    GROUP BY order_id;
    

    这会得到您按订单生产的总平方英尺。

    (SELECT order_id, sum(sqft_produced) total_sqft
    GROUP BY order_id) sqfts INNER JOIN revenues ON sqfts.order_id = revenues.order_id;
    

    这将为您提供一个包含总收入和总平方英尺的表格。

    然后您将此表加入您的 sqft 表,然后将每月生产的平方英尺除以总平方英尺,再乘以总收入,从而将收入按比例分成平方英尺。

    【讨论】:

      【解决方案2】:

      通过将平方英尺除以在 [Order] 上划分的平方英尺的总和来获得百分比将为您提供所需的内容:

      select p.[Order], 
             [Month], 
             Revenue, 
             [sqft produced], 
             CAST([sqft produced] / SUM([sqft produced]) OVER(PARTITION BY p.[Order]) AS DECIMAL(10,5)) * 100 as sqft_percentage, 
             Revenue * CAST([sqft produced] / SUM([sqft produced]) OVER(PARTITION BY p.[Order]) AS DECIMAL(10,5)) as revenue_produced
      FROM [Orders] p
      INNER JOIN Revenue r
      ON r.[Order] = p.[Order]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 2020-08-25
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多