2015-02-24 81 views
0

我正在嘗試拉動與超過1個folderpeople記錄的405B文件夾相關聯的人員記錄。我使用了以下SQL來獲取計數,但我無法弄清楚如何提取實際的人員信息,p.namefirst,p.namelast,p.organizationname和fp.peoplecode。我試過在GROUP BY和HAVING上使用各種排列,但是我一直在收到錯誤。我只想要來自文件夾,文件夾人員和超過1個文件夾人員記錄的人員的數據。SQL Group By和顯示字段

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

我可以添加這些領域很好,但它會從500條記錄到少於這個數字,我需要全部500個字段。 – DEwok 2015-02-24 20:00:03

+0

你可以添加一些數據,並告訴我們你期望得到什麼 – Smog 2015-02-24 20:01:38

回答

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與從未組合的表和列中獲取的所有數據組合在一起的格式。

+0

這是讓我在某個地方,我正在嘗試和調整由於數據。但是,是的,你認爲是正確的。 – DEwok 2015-02-24 20:25:18

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; 
+0

這也適用,但運行時間較長。 – DEwok 2015-02-24 20:50:10

+0

有趣。我很驚訝花了更長的時間。 – 2015-02-24 22:22:44