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;