2017-02-20 69 views
0

我想集团通过的ContactID,只有重组具有自动编号> 1的重复计数使用熊猫集团,我会做这样的事情:SQL服务器:斯普利特,筛选和重组

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 
)