SQL Group By 和 Having 显示字段
SQL Group By and Having display fields
我正在尝试提取与 405B 文件夹关联的人员记录,其中有超过 1 个文件夹人员记录。我使用以下 SQL 来获取计数,但我不知道如何提取实际人员信息,p.namefirst、p.namelast、p.organizationname , 和 fp.peoplecode。我已经尝试在 GROUP BY 和 HAVING 上使用各种排列,但我不断收到错误。我只想要来自文件夹、文件夹人员和超过 1 个文件夹人员记录的人员的数据。
SELECT f.folderrsn, Count(fp.folderrsn)
FROM folder f
INNER JOIN folderpeople fp ON f.folderrsn = fp.folderrsn
WHERE f.foldertype = '405B'
GROUP BY f.folderrsn
HAVING Count(fp.folderrsn) > 1
ORDER BY f.folderrsn
有什么建议吗?
不是很了解您的模式或数据(例子在这里真的很有帮助),听起来您想要这样的东西?
SELECT p.namefirst, p.namelast, p.organizationname, fp.peoplecode
FROM folder f
INNER JOIN folderpeople fp ON f.folderrsn = fp.folderrsn
WHERE fp.folderrsn IN (
SELECT folderrsn
FROM folder
WHERE folderType = '405B'
GROUP BY folderrsn
HAVING COUNT(folderrsn) > 1
)
基本上,select 从您想要的表中获取您想要的所有数据,然后将结果筛选为仅文件夹符合您条件的那些。所以我这里的细节可能有误,但这可能会为您提供您正在寻找的格式,以了解如何将 GROUP BY/HAVING 与从您没有分组的表和列中获取所有数据相结合。
据推测,您有某种 "persons" table,其中包含您在问题中引用的列。这可以连接回 folderpeople
.
鉴于此,您 可以 通过重新加入信息来解决问题。这是一条信息,因为您也可以使用 window 中的函数来做到这一点 SQL 服务器:
SELECT pf.*
FROM (SELECT p.*, f.folderrsn,
count(*) over (partition by f.folderrsn) as cnt
FROM folder f INNER JOIN
folderpeople fp
ON f.folderrsn = fp.folderrsn JOIN
people p
ON fp.personid = p.personid
WHERE f.foldertype = '405B'
) pf
WHERE cnt > 1
ORDER BY olderrsn;
我正在尝试提取与 405B 文件夹关联的人员记录,其中有超过 1 个文件夹人员记录。我使用以下 SQL 来获取计数,但我不知道如何提取实际人员信息,p.namefirst、p.namelast、p.organizationname , 和 fp.peoplecode。我已经尝试在 GROUP BY 和 HAVING 上使用各种排列,但我不断收到错误。我只想要来自文件夹、文件夹人员和超过 1 个文件夹人员记录的人员的数据。
SELECT f.folderrsn, Count(fp.folderrsn)
FROM folder f
INNER JOIN folderpeople fp ON f.folderrsn = fp.folderrsn
WHERE f.foldertype = '405B'
GROUP BY f.folderrsn
HAVING Count(fp.folderrsn) > 1
ORDER BY f.folderrsn
有什么建议吗?
不是很了解您的模式或数据(例子在这里真的很有帮助),听起来您想要这样的东西?
SELECT p.namefirst, p.namelast, p.organizationname, fp.peoplecode
FROM folder f
INNER JOIN folderpeople fp ON f.folderrsn = fp.folderrsn
WHERE fp.folderrsn IN (
SELECT folderrsn
FROM folder
WHERE folderType = '405B'
GROUP BY folderrsn
HAVING COUNT(folderrsn) > 1
)
基本上,select 从您想要的表中获取您想要的所有数据,然后将结果筛选为仅文件夹符合您条件的那些。所以我这里的细节可能有误,但这可能会为您提供您正在寻找的格式,以了解如何将 GROUP BY/HAVING 与从您没有分组的表和列中获取所有数据相结合。
据推测,您有某种 "persons" table,其中包含您在问题中引用的列。这可以连接回 folderpeople
.
鉴于此,您 可以 通过重新加入信息来解决问题。这是一条信息,因为您也可以使用 window 中的函数来做到这一点 SQL 服务器:
SELECT pf.*
FROM (SELECT p.*, f.folderrsn,
count(*) over (partition by f.folderrsn) as cnt
FROM folder f INNER JOIN
folderpeople fp
ON f.folderrsn = fp.folderrsn JOIN
people p
ON fp.personid = p.personid
WHERE f.foldertype = '405B'
) pf
WHERE cnt > 1
ORDER BY olderrsn;