Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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_Sql - Fatal编程技术网

平均重复SQL

平均重复SQL,sql,Sql,我目前在为不同的日期范围创建两个AVG列时遇到问题 我尝试了下面的代码来解决这个问题 WITH Tbl AS( SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme FROM Salereport WHERE Business Area='Sales' ) SELECT AgentName, (SELECT AVG(NewScheme) FROM Tbl WHE

我目前在为不同的日期范围创建两个AVG列时遇到问题

我尝试了下面的代码来解决这个问题

WITH Tbl AS(
    SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme
FROM Salereport
WHERE Business Area='Sales'
)

SELECT
AgentName, 
(SELECT AVG(NewScheme) FROM Tbl WHERE SALE_MY='01.2019' OR SALE_MY='02.2019' OR SALE_MY='03.2019'),
(SELECT AVG(NewScheme) FROM Tbl WHERE SALE_MY='04.2019' OR SALE_MY='05.2019' OR SALE_MY='06.2019')


FROM Tbl

GROUP BY Employee

结果是每个人的平均值相同。

使用条件聚合:

SELECT Employee,
       AVG(CASE WHEN SaleDate >= '2019-01-01' AND SaleDate < '2019-04-01'
                THEN NewScheme
           END),
       AVG(CASE WHEN SaleDate >= '2019-01-04' AND SaleDate < '2019-04-07'
                THEN NewScheme
           END),
FROM Salereport
WHERE Business Area = 'Sales'
GROUP BY Employee;
选择员工,
平均值(SaleDate>='2019-01-01'和SaleDate<'2019-04-01'时的情况)
然后是新闻模式
(完),,
平均值(SaleDate>='2019-01-04'和SaleDate<'2019-04-07'时的情况)
然后是新闻模式
(完),,
来自销售报告
其中业务领域=‘销售’
按员工分组;
处理日期时,应使用日期操作。通常需要转换为字符串的唯一时间是格式化结果集中的日期

顺便说一句,您的版本是所有员工的平均值。不需要子查询,但如果要使用子查询,则需要相关子查询。

请尝试以下操作:

 WITH Tbl AS(
        SELECT FORMAT(SaleDate,'MM')+'.'+FORMAT(SaleDate,'yyyy') AS SALE_MY, Employee, NewScheme
    FROM Salereport
    WHERE Business Area='Sales'
    )
    SELECT Employee, 
    AVG(CASE WHEN SALE_MY IN ('01.2019', '02.2019', '03.2019') THEN NewScheme ELSE NULL END) AS Q1_Avg, 
    AVG(CASE WHEN SALE_MY IN ('04.2019', '05.2019', '06.2019') THEN NewScheme ELSE NULL END) AS Q2_Avg
    FROM Tbl
    GROUP BY Employee

请用您正在使用的数据库标记:@Gordon是正确的,您不需要将日期转换为字符串。他的回答会有更好的表现,谢谢你。我在自己的思路中迷失了方向-这将对我的未来有很大帮助。我们将如何在何时将不包含NULL引入到这个案例中?@Wyseguy。我不明白你的评论
NULL
值不影响平均值。