【发布时间】:2018-08-22 15:48:20
【问题描述】:
我需要识别所有 MostRecent=-1、OilWell=-1 的记录,以及具有相同 Api 的重复记录,并将它们连接起来以获取关联的 CompanyName。
使用查询:
SELECT
BLMAPDCONTACT.CompanyName, APD.Api, APD.ID, APD.MostRecent,
APD.Project_Nu, APD.Unit_Lease, APD.Well_Nu, APD.OilWell
FROM
APD
INNER JOIN
BLMAPDCONTACT ON APD.BLM_APD_Cont = BLMAPDCONTACT.OBJECTID
WHERE
(APD.Api IN (SELECT APD.Api
FROM APD AS Tmp
WHERE APD.MostRecent = -1 AND APD.OilWell = -1
GROUP BY APD.Api
HAVING Count(APD.Api) > 1))
ORDER BY
APD.Api DESC;
我收到此错误:
每个 GROUP BY 表达式必须至少包含一个不是外部引用的列。
这个错误是我添加JOIN子句后出现的;没有它,它起作用了。
所需输出示例将匹配 APD 表中的以下记录:
APD.Api | APD.MostRecent | APD.OilWell
--------------------------------------
123 | -1 | -1
123 | -1 | -1
而不是:
APD.Api | APD.MostRecent | APD.OilWell
--------------------------------------
321 | 0 | -1
321 | -1 | -1
【问题讨论】:
-
嗨。您将 APD 别名为 tmp,因此您需要使用 tmp 列对表达式进行分组。大概其他内部选择 APD 列引用也应该使用 tmp 。但是为什么别名呢? PS请阅读minimal reproducible example并采取行动。 PS您询问错误。但是获取带有重复子行的行是一个常见问题。所以这是一种查看正确查询的方法。
标签: sql-server group-by count inner-join