sap - 如何将 SUBSELECT 与 JOIN 一起使用?
问题描述
我想构建一个 OpenSQL 查询以仅返回stat
all的最大值objnr
。
这有效:
SELECT O~OBJNR
FROM JCDS AS O
WHERE O~OBJNR = 'Obj12345'
AND STAT = ( SELECT MAX(STAT)
FROM JCDS AS I
WHERE I~OBJNR = O~OBJNR ).
但是,如果我尝试使用连接,而不是objnr
直接提供,我会收到一条错误消息:
SELECT O~OBJNR, O~STAT
FROM JCDS AS O
INNER JOIN AFVC
ON AFVB~OBJNR = O~OBJNR
WHERE "AUFPL" = 'Aufpl12345'
AND O~STAT = ( SELECT MAX(STAT)
FROM JCDS AS I
WHERE I~OBJNR = O~OBJNR ).
错误信息没有意义;“SQL 错误”
解决方案
您可以通过按对象编号分组来简化查询:
SELECT O.OBJNR, MAX(O.STAT)
FROM JCDS AS O
GROUP BY O.OBJNR
根据您需要从连接表中显示的列,您可以通过以下方式扩展组:
SELECT O.OBJNR, A.SOMECOL, MAX(O.STAT)
FROM JCDS AS O
INNER JOIN AFVC AS A
ON AFVB.OBJNR = O.OBJNR
GROUP BY O.OBJNR, A.SOMECOL
或使用子查询:
SELECT MAXSTAT.OBJNR, MAXSTAT.STAT, A.SOMECOL
FROM (
SELECT O.OBJNR, MAX(O.STAT) STAT
FROM JCDS AS O
GROUP BY O.OBJNR ) MAXSTAT
INNER JOIN AFVC AS A
ON AFVB.OBJNR = MAXSTAT.OBJNR
推荐阅读
- sql-server - 每年的 COUNT 月销售额
- xml - 我是 XML 新手,我正在为应用程序编写的文件一直以格式错误的形式返回
- git - 为什么 git fetch 不创建本地分支?
- visual-studio - Visual Studio 搜索/替换免费条目“查找”字段的用途是什么?
- excel - 如何让私人潜艇与“普通”潜艇一起工作?
- sql - ms 访问中的语法错误(缺少运算符)
- smtp - 使用 gmail 使用 smtp 发送电子邮件
- r - 有没有办法通过编织到 R 中的静态 HTML 输出来点击传单小部件形状?
- c# - C#中指令之间的精确计时
- c# - String.Format() 不起作用,但 string.Format() 起作用