我正在尝试拉出与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
有什么建议吗?
答案 0 :(得分:1)
不是真正了解你的架构或数据(这里的例子确实会有所帮助),它的声音就像你想要这样的东西?
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
)
基本上,从所需的表中选择所需的所有数据,然后将结果过滤到仅符合条件的文件夹。所以我在这里可能有错误的详细信息,但是这可能会为您提供一种格式,您可以在如何将GROUP BY / HAVING与从您未分组的表和列中获取所有数据相结合。
答案 1 :(得分:0)
据推测,您有某种“人”表,其中包含您在问题中引用的列。这可以加入folderpeople
。
鉴于此,您可以通过重新加入信息来解决问题。这是一个消息,因为您也可以使用SQL Server中的窗口函数来执行此操作:
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;