Sql server HAVING子句中count()=1的TSQL limit记录
好的,我有3个表,它们在指定的键上链接Sql server HAVING子句中count()=1的TSQL limit记录,sql-server,tsql,Sql Server,Tsql,好的,我有3个表,它们在指定的键上链接 account (accountnumber) package (packageid, accountnumber) hostdomain (packageid) 我需要得到所有帐户,只有一个域,这里是我的查询到目前为止,但它是返回所有域。我做错了什么 select domainname, resellerAccountNumber, a.accountnumber, companyname, firstname
account (accountnumber)
package (packageid, accountnumber)
hostdomain (packageid)
我需要得到所有帐户,只有一个域,这里是我的查询到目前为止,但它是返回所有域。我做错了什么
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')
在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
您正在按太多字段进行聚合。我想你想要这样的东西:
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');
我通过从
组中删除了域名
(并进行了相关更改)。我不知道如何处理domainaliasid
,因为您的问题没有提到任何关于过滤数据的内容,只是将其聚合。您可能希望删除它以获得所需的内容。是否应该和domainAliasID=0以及('''LNC','CFMXHOSTING')中的RebelerAccountNumber
不在where子句中,而不是在have中?