Sql server 在SQL视图中创建条件列

Sql server 在SQL视图中创建条件列,sql-server,Sql Server,我正在MSSQL中从另一个视图创建视图。 原始视图包含每天填充的容器及其总重量的信息,每一行都有一个操作员名称,指示谁在该容器上工作。差不多 操作员姓名总集装箱总重量日期 乔。。。。。。。。。。。。。。。。。。。。10 .................. 1000 .......... 2020年1月5日 乔。。。。。。。。。。。。。。。。。。。。25 .................. 2500 ....

我正在MSSQL中从另一个视图创建视图。 原始视图包含每天填充的容器及其总重量的信息,每一行都有一个操作员名称,指示谁在该容器上工作。差不多

操作员姓名总集装箱总重量日期

乔。。。。。。。。。。。。。。。。。。。。10 .................. 1000 .......... 2020年1月5日

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

卡尔。。。。。。。。。。。。。。。。。。。20 .................. 2000........... 2020年1月5日

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

我的新视图显示了给定操作员随时间填充的集装箱总数和重量,以及这些值的日平均值。我还想添加一列,显示上个月集装箱和重量的平均值。我现在有这个代码

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子句中,我想添加如下内容 平均值(总重量),其中月份(日期时间)=月份(最大日期时间)为最后一个月的平均值/ 当然,这种语法是错误的

有人知道如何创建这样的专栏吗? 提前感谢

尝试下面的查询

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
尝试下面的查询

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

WHERE子句应该在表信息之后,您不能在selectWHERE子句应该在表信息之后给出WHERE,您不能在selectWHERE中给出WHERE谢谢您的回答,当我为上个月的平均权重编写代码时,SQL告诉我:无法对包含聚合或子查询的表达式执行聚合函数,这是after我尝试保存视图,很抱歉,尝试另一种方法。@Juangirdo更新了答案,你能检查一下onceThanks的答案吗,当我为上个月的平均权重编写代码时,SQL告诉我:无法对包含聚合或子查询的表达式执行聚合函数,这是在我尝试保存视图之后。很抱歉,尝试另一种方法。@Juangirdo更新了答案,你能检查一下吗