2017-02-20 32 views
0

Я хочу Group By ContactID, и только рекомбинировать группы, которые имеют отчетливый граф Autonumber> 1. Использование панд, я хотел бы сделать что-то вроде:SQL Server: Split, Filter и рекомбинируют

refinance_data = refinance_data.groupby('ContactID').filter(lambda x: x.AutoNumber.nunique() > 1) 

Моего SQL запрос ...

SELECT Ge.LoanAgreementID, Ge.Amount, Ge.ContactID, Ge.TransactionDate, Lo.AutoNumber, Ge.GeneralLedgerType FROM GeneralLedger as Ge 
JOIN LoanAgreements Lo ON Ge.LoanAgreementID = Lo.LoanAgreementID 
GROUP BY Ge.ContactID HAVING COUNT(DISTINCT Lo.AutoNumber) >1; 

производит следующее сообщение об ошибке:

Msg 8120, Level 16, State 1, Line 1 
Column 'GeneralLedger.LoanAgreementID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 
+2

Просьба представить СОЗДАТЬ скрипт и вставить некоторые образцы данных, мы будем рады помочь! –

ответ

1

Может быть это? (Если я правильно понимаю ваше объяснение.) Я не знаю панду.

SELECT Ge.LoanAgreementID, Ge.Amount, Ge.ContactID, Ge.TransactionDate, Lo.AutoNumber, GeneralLedgerType GETBND 
FROM GeneralLedger AS Ge 
JOIN LoanAgreements Lo ON Ge.LoanAgreementID = Lo.LoanAgreementID 
WHERE 
    Ge.ContactID IN (
SELECT Ge1.ContactID 
FROM GeneralLedger AS Ge1 
JOIN LoanAgreements Lo1 ON Ge1.LoanAgreementID = Lo1.LoanAgreementID 
GROUP BY Ge1.ContactID 
HAVING COUNT(DISTINCT Lo1.AutoNumber) >1 
) 
+0

Да - это прекрасно и точно, что мне нужно. Спасибо! –

1

Вы можете просто присоединиться на ContactId:

SELECT Ge.LoanAgreementID, Ge.Amount, Ge.ContactID, Ge.TransactionDate, Lo.AutoNumber, Ge.GeneralLedgerType 
FROM GeneralLedger as Ge 
INNER JOIN 
(
    SELECT Ge.ContactID 
    FROM GeneralLedger as Ge 
    JOIN LoanAgreements Lo ON Ge.LoanAgreementID = Lo.LoanAgreementID 
    GROUP BY Ge.ContactID 
    HAVING COUNT(DISTINCT Lo.AutoNumber) >1 
    ) t 
ON Ge.ContactID = t.ContactID; 
1

Чтобы выбрать все, где более чем один отчетливый AutoNumber существует LoanAgreementID:

select 
    Ge.LoanAgreementID 
, Ge.Amount 
, Ge.ContactID 
, Ge.TransactionDate 
, Lo.AutoNumber 
, Ge.GeneralLedgerType 
from GeneralLedger as Ge 
    inner join LoanAgreements Lo 
    on Ge.LoanAgreementID = Lo.LoanAgreementID 
where exists (
    select 1 
    from LoanAgreements as i 
    where i.LoanAgreementID = Lo.LoanAgreementID 
    and i.AutoNumber != Lo.AutoNumber 
)