因此,我对使用SQL非常陌生。这种语法格式令人反感,但我正在记事本中对其进行编辑,因此找不到更好的选择。我想要.dqy格式的文件,但不知道如何编辑。因此,如果您有建议,请提出建议。
一般描述:下面是我试图开始工作的SUM(CASE WHEN ...)
部分代码。我正在制作一个异常报告,我想要另一列是基于我的串联值(不包括该条目)的条件平均值。 IE,在Excel中,这是一个简单的公式(第一列):
=+IFERROR(AVERAGEIFS(H:H,C:C,[@Cust],A:A,"<>"&[@[Order Number]]),0)
这是我的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
答案 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 :(得分:0)
我不完全理解该示例,但是对于一般情况,您可以使用:
AVG(在[condition1]和[condition2]然后[您要平均的值]其他NULL END的情况下。)
如果该列包含所有符合您条件的行,则此平均值应返回平均值。