可以为1个帐号分配多个帐户名。由于数据库中有一百万行,我想知道如何查询仅分配给一个帐户的帐户#。请参阅以下示例数据:
帐号#100,100,500,650,250,250,600,400,400
帐户名称ABA,DSA,ABA,DSA,ABA,DSA,DSA,ABA,ABA
查询结果应为#500,650,400帐户,因为这些帐户#只分配了一个帐户名称。
帐户100和250分配了多个帐户名。如何仅分配1个帐户名来过滤帐号?请帮忙
答案 0 :(得分:0)
select account_num
from your_table
group by account_num
having COUNT(*) = 1
有些人会对COUNT()中的*表示不满,但如果这是一个临时的非生产查询,我认为这在性能方面并不重要。
答案 1 :(得分:0)
基于这个问题,我相信查询应该返回400,500,600,650。
使用having count(*) =1
子句的查询将不会根据问题中给出的数据返回400。
create table #Accounts (
AccountNumber int not null
, AccountName char(3) not null
)
insert into #Accounts (AccountNumber,AccountName) values
(100,'ABA')
,(100,'DSA')
,(500,'ABA')
,(650,'DSA')
,(250,'ABA')
,(250,'DSA')
,(600,'DSA')
,(400,'ABA')
,(400,'ABA');
with cte as (
select AccountNumber
, AccountName
, RowNumber= row_number() over (
partition by AccountNumber
order by AccountName
)
from #Accounts
group by AccountNumber, AccountName
)
select AccountNumber
, AccountName
from cte
where not exists (
select 1
from cte as i
where i.AccountNumber = cte.AccountNumber
and i.RowNumber = 2
);
答案 2 :(得分:0)
这将返回帐号no和名称,其中帐号no链接到多个名称 注意:在您的示例数据中,帐户号400两次链接到同一个名称... 我不确定它是否应该算作与1个名字相关联......
这将包括AccountNo 400
SELECT DISTINCT AccountNo, AccountName
FROM #Accounts a
WHERE (
SELECT COUNT(DISTINCT AccountName)
FROM #Accounts b
WHERE a.AccountNo = b.AccountNo) = 1
这不包括400号帐户(子查询中没有DISTINCT)
SELECT DISTINCT AccountNo, AccountName
FROM #Accounts a
WHERE (
SELECT COUNT(AccountName)
FROM #Accounts b
WHERE a.AccountNo = b.AccountNo) = 1