SQL AverageIFS等效于查询

时间:2018-08-10 15:49:50

标签: sql excel-formula average ms-query

因此,我对使用SQL非常陌生。这种语法格式令人反感,但我正在记事本中对其进行编辑,因此找不到更好的选择。我想要.dqy格式的文件,但不知道如何编辑。因此,如果您有建议,请提出建议。

一般描述:下面是我试图开始工作的SUM(CASE WHEN ...)部分代码。我正在制作一个异常报告,我想要另一列是基于我的串联值(不包括该条目)的条件平均值。 IE,在Excel中,这是一个简单的公式(第一列):

=+IFERROR(AVERAGEIFS(H:H,C:C,[@Cust],A:A,"<>"&[@[Order Number]]),0)

除了我要在查询中将其拉出。 这是输出的图片: Query Output

这是我的SQL。同样,如果我可以编辑.dqy而不是记事本,那么我知道格式化会发臭,请告知。另外,在我的代码的第6行中,这3表示什么。我从其他地方进行了查询,并将其修改到该项目中。

XLODBC
1
DRIVER=SQL Server;
SERVER=*OMIT*;
UID=*OMIT*;
Trusted_Connection=Yes;
APP=Microsoft Office 2010;
WSID=*OMIT*;
DATABASE=*OMIT*
SELECT DISTINCT RMORHP.ORHORDNUM AS 'Order Number',
                RMORHP.ORHCRTDTE AS 'Order Create Date',
                CONCAT(RMORHP.ORHCUSCHN, '-', RMORHP.ORHCUSNUM) AS 'Cust',
                RMORHP.ORHCUSCHN AS 'Chain ID',
                RMORHP.ORHCUSNUM AS 'Cust ID',
                RMCUSP.CUSCUSNAM AS 'Customer',
                RMORHP.ORHCRTUSR AS 'Created By',
                RMORHP.ORHORDQTY AS 'Units Ordered',
                SUM(CASE
                    WHEN RMCUSP.CUSCUSNAM = RMCUSP.CUSCUSNAM
                    THEN RMORHP.ORHORDQTY
                    END)
GROUP BY RMCUSP.CUSCUSNAM AS 'Total Units'
FROM BIDW_DataLake.erms.RMORHP RMORHP,
     BIDW_DataLake.eRMS.RMCUSP RMCUSP
WHERE (RMORHP.ORHCRTDTE BETWEEN ? AND ?)
    AND RMCUSP.CUSCUSCHN = RMORHP.ORHCUSCHN
    AND RMCUSP.CUSCUSNUM = RMORHP.ORHCUSNUM
    AND RMCUSP.CUSDFTDCN = 505
enter
    START date "yyyymmdd" enter END date "yyyymmdd"
3   3
Order Number    Create Date Cust    Chain ID    Cust ID Customer    Created By

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试获取给定日期范围内客户下达的 other 个订单的平均订单数量。换句话说:给定客户订单的平均值,不包括当前行中的订单。

如果正确,您可以尝试使用以下方法替换查询的SQL部分:

SELECT R1.ORHORDNUM AS 'Order Number',
       R1.ORHCRTDTE AS 'Order Create Date',
       CONCAT(RMORHP.ORHCUSCHN, '-', RMORHP.ORHCUSNUM) AS 'Cust',
       R1.ORHCUSCHN AS 'Chain ID',
       R1.ORHCUSNUM AS 'Cust ID',
       RMCUSP.CUSCUSNAM AS 'Customer',
       R1.ORHCRTUSR AS 'Created By',
       R1.ORHORDQTY AS 'Units Ordered',
       (SELECT AVG(R2.HORDQTY)
          FROM BIDW_DataLake.erms.RMORHP R2
         WHERE R2.ORHCUSNUM = R1.ORHCUSNUM
           AND R2.ORHORDNUM <> R1.ORHORDNUM)  as 'Total Units'
FROM BIDW_DataLake.erms.RMORHP R1,
     BIDW_DataLake.eRMS.RMCUSP RMCUSP
WHERE (RMORHP.ORHCRTDTE BETWEEN ? AND ?)
    AND RMCUSP.CUSCUSCHN = R1.ORHCUSCHN
    AND RMCUSP.CUSCUSNUM = R1.ORHCUSNUM
    AND RMCUSP.CUSDFTDCN = 505

总单位列是所谓的相关子查询。考虑研究一下。

什么使这个答案不好:

  1. 我无法对其进行测试,并且我不确定100% Excel与SQL Server连接的MS-Query语法。
  2. MS-Query可能不以这种方式支持相关子查询。
  3. 我不太了解查询的参数化部分是如何工作的。就是说,很显然,该查询看起来像是要询问开始和结束日期,并将其放在问号所在的位置。我相信它可以按原样工作。 (不过,我怀疑这是您的“ 3 3”的来源。

因此,可能会否决这个答案,并以错误的答案对我大声疾呼,但也许您会从中得到一些帮助。我只是认为尝试发表评论实在太多了。

答案 1 :(得分:0)

我不完全理解该示例,但是对于一般情况,您可以使用:

AVG(在[condition1]和[condition2]然后[您要平均的值]其他NULL END的情况下。)

如果该列包含所有符合您条件的行,则此平均值应返回平均值。