首页 > 解决方案 > 在 SQL VIEW 中创建条件列

问题描述

我正在从 MSSQL 中的另一个视图创建一个视图。原始视图包含每天装满的容器及其总重量的信息,每一行都有一个 Operator_name,表明谁在这个容器上工作。就像是

Operator_name total_containers Total_weight 日期

乔 ..................... 10 .................. 1000 ...... . 05/01/2020

乔 ..................... 25 .................. 2500 ...... . 2020 年 5 月 2 日

卡尔 .................... 20 .................. 2000........ . 05/01/2020

卡尔 ...................... 30 ........ 3000 ...... 2020 年 5 月 2 日

我的新视图为给定的操作员显示了他随时间填充的容器总数和重量,以及这些值的日平均值,我还想添加一个显示容器和重量平均值的列,但仅用于上个月。我目前有这个代码

SELECT operator_name
    ,SUM(total_container) AS containers
    ,SUM(total_weight) AS weight
    ,AVG(total_container) AS avg_container
    ,AVG(total_weight) AS avg_weight
    ,AVG(weight)
WHERE MONTH(date_time) = MONTH(MAX(date_time)) AS last_weight
FROM dbo.V_TDD_BATCH
GROUP BY operator_name

在 Select 子句中,我想添加类似 AVG(total_weight) WHERE MONTH(date_time) = MONTH(MAX(date_time) as last_month_Average/ 但这种语法当然是错误的。

有谁知道我怎样才能创建这样的列?提前致谢

标签: sql-server

解决方案


试试下面的查询。

WITH lastMonth
AS (
    SELECT operator_name
        ,AVG(total_weight) last_month_Average
    FROM dbo.V_TDD_BATCH
    GROUP BY operator_name
    HAVING MONTH(date_time) = MONTH(MAX(date_time))
    )
SELECT operator_name
    ,SUM(total_container) AS containers
    ,SUM(total_weight) AS weight
    ,AVG(total_container) AS avg_container
    ,AVG(total_weight) AS avg_weight
    ,AVG(weight)
    ,(
        SELECT TOP 1 last_month_Average
        FROM lastMonth
        WHERE operator_name = b.operator_name
        ) AS [last_month_Average]
FROM dbo.V_TDD_BATCH b
GROUP BY b.operator_name

推荐阅读