Sql server 我有一个贷款ID和地址栏。如何查找是否有多个地址链接到每笔贷款?

Sql server 我有一个贷款ID和地址栏。如何查找是否有多个地址链接到每笔贷款?,sql-server,Sql Server,我试图找出我的DB中的哪些贷款由多个财产担保。例如,如果有一个贷款ID与两个完全不同的地址关联 这是我已经尝试过的代码 Select * FROM [loan].[dim_property] Where [account_id_bk] in ( Select [account_id_bk] FROM [loan].[dim_property] Group by [account_id_bk]

我试图找出我的DB中的哪些贷款由多个财产担保。例如,如果有一个贷款ID与两个完全不同的地址关联

这是我已经尝试过的代码

Select * 
FROM [loan].[dim_property]
Where [account_id_bk] in (
              Select [account_id_bk]
              FROM [loan].[dim_property]
              Group by [account_id_bk]
               Having COUNT(distinct address1) > '1'                )

没有得到我想要的

学会提问。您的读者不了解您的模式。要针对您的模式编写或更正查询,必须了解所涉及表的DDL——最重要的是主键、外键和唯一约束。您的命名约定也不能真正帮助理解查询/模式帐户id\U bk-这是什么意思

应该有

select prp.account_id_bk, count(*)
from loan.dim_property as prp 
group by prp.account_id_bk
having count(*) > 1
order by prp.account_id_bk;
这回答了你的问题(如果我猜对的话)。我假设account_id_bk识别一笔“贷款”,因此任何拥有相同帐户的财产都是该贷款的担保。但是你发布的查询表明你的实际目标与你所问的问题不同——你的标题暗示了同样的事情


如果需要,您可以将该查询填充到cte中,并将其连接到dim_属性,以检索这组贷款的属性行。那对你来说是一个很好的学习练习

脚本似乎还可以。您能添加一些输出数据和您期望的数据吗?“
COUNT(distinct address1)>'1'
”--在此上下文中,
1
肯定是一个数字而不是字符串,因此不应该用单引号括起来。“COUNT(distinct address1)>'1'”@stickybit没有问题,因为SQL server会自动将此字符串转换为INT并提供预期结果。“没有得到我想要的东西”不是一个特别有意义的问题描述。我们不知道你得到了什么,你期望什么,你的投入是什么。当您尝试对一小部分受控数据集执行此查询时,结果是什么?预期的结果是什么?样本数据是什么?@mkRabbani:可能是误解。。。我不想说它改变了结果,它没有,因为正如你所说的,有一个自动转换。但是如果没有引号,它会更干净,如果你能从一开始就给出正确的值,为什么还要强制转换呢。