2015-02-24 2 views
0

Я пытаюсь вытащить записи людей, связанные с папками 405B, где записано более одной записи в папке. Я использовал следующий SQL, чтобы получить подсчеты, но я не могу понять, как вытащить информацию о реальных людях, p.namefirst, p.namelast, p.organizationname и fp.peoplecode. Я попытался использовать различные перестановки в GROUP BY и HAVING, но я продолжаю получать ошибки. Мне нужны только данные из папки, папки, людей и людей, где записано более одной записи в папке.SQL Group Поля и наличие полей отображения

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

+0

можете ли вы добавить немного своих данных и показать нам, что вы ожидаете получить? – Smog

ответ

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

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

+0

Интересно. Я удивлен, что потребовалось больше времени. –