2013-12-17 30 views
0
計數()= 1

好,我有3個被指定的鍵TSQL極限記錄,其中內HAVING子句

account (accountnumber) 
package (packageid, accountnumber) 
hostdomain (packageid) 

我需要的是隻有1個域中的所有帳戶鏈接表,這是我的查詢,以便遠,但它是返回所有域。我究竟做錯了什麼 ?

select 
    domainname, 
    resellerAccountNumber, 
    a.accountnumber, 
    companyname, 
    firstname, 
    lastname, 
    primaryemail, 
    HomePhone 
    workphone 
FROM account a 
INNER JOIN Package p on p.AccountNumber = a.AccountNumber 
INNER JOIN hostdomain hd ON HD.packageId = p.packageID 
GROUP BY 
    domainname, reselleraccountnumber, a.accountnumber, companyname, 
    firstname,lastname,primaryemail, HomePhone,workphone, domainaliasId 
HAVING COUNT(domainname) =1 
    AND domainAliasID = 0 
    AND ResellerAccountNumber in ('','LNC','CFMXHOSTING') 
+0

如果('','LNC','CFMXHOSTING')'AND AND domainAliasID = 0 AND ResellerAccountNumber'不在where子句中而不是在? –

回答

0

你被太多的領域聚集。我想你想是這樣的:

select min(domainname) as domainname, resellerAccountNumber, 
     a.accountnumber, companyname, firstname, lastname, primaryemail, 
     HomePhone, workphone 
FROM account a INNER JOIN 
    Package p 
    on p.AccountNumber = a.AccountNumber INNER JOIN 
    hostdomain hd ON HD.packageId = p.packageID 
GROUP BY reselleraccountnumber, a.accountnumber, companyname, firstname, 
     lastname, primaryemail, HomePhone, workphone, domainaliasId 
HAVING COUNT(domainname) = 1 AND 
     domainAliasID = 0 AND 
     ResellerAccountNumber in ('','LNC','CFMXHOSTING'); 

我從group by取出domainname(並取得相關的變化)。我不知道如何處理domainaliasid,因爲你的問題沒有提及過濾數據的任何內容,只是聚合它。你可能想要刪除它以獲得你想要的。

+0

謝謝你的工作 – snake

1

HAVING子句中只能使用匯總:

WHERE 
    domainAliasID = 0 
    AND ResellerAccountNumber in ('','LNC','CFMXHOSTING') 
GROUP BY 
    domainname, reselleraccountnumber, a.accountnumber, 
    companyname,firstname,lastname,primaryemail, HomePhone, 
    workphone, domainaliasId 
HAVING COUNT(domainname) = 1