Sql server 如何在两列中查找并选择多个重复项
我有一个SQL Server数据库表Sql server 如何在两列中查找并选择多个重复项,sql-server,Sql Server,我有一个SQL Server数据库表Inventory,其中有两列我感兴趣的hospital\u id和location\u id。它们各自可以有副本 我想按顺序找出有多个位置id的医院id 例如,以下是我的专栏: 输出应为: 更新: 作为Gordon查询的替代方案,您可以稍微修改@JuergenD和我最初给出的答案: SELECT hospital_id FROM yourTable GROUP BY hospital_id HAVING COUNT(*) - COUNT(DISTINCT
Inventory
,其中有两列我感兴趣的hospital\u id
和location\u id
。它们各自可以有副本
我想按顺序找出有多个位置id
的医院id
例如,以下是我的专栏:
输出应为:
更新: 作为Gordon查询的替代方案,您可以稍微修改@JuergenD和我最初给出的答案:
SELECT hospital_id
FROM yourTable
GROUP BY hospital_id
HAVING COUNT(*) - COUNT(DISTINCT location_id) >= 1
ORDER BY hospital_id
任何地点都有两个的医院的总计数将大于
不同的
计数。更新:
作为Gordon查询的替代方案,您可以稍微修改@JuergenD和我最初给出的答案:
SELECT hospital_id
FROM yourTable
GROUP BY hospital_id
HAVING COUNT(*) - COUNT(DISTINCT location_id) >= 1
ORDER BY hospital_id
任何地点都有两个副本的医院,其总计数将大于
不同的
计数。我相信您需要两个医院id
/地点id
对。我不知道你为什么只输出医院id
,但你可以这样做
select hospital_id
from t
group by hospital_id, location_id
having count(*) > 1;
我相信您需要医院id的副本/
位置id
对。我不知道你为什么只输出医院id
,但你可以这样做
select hospital_id
from t
group by hospital_id, location_id
having count(*) > 1;
还有一种方法:
SELECT TOP 1 WITH TIES hospital_id --, location_id --if you need
FROM Inventory
ORDER BY
CASE WHEN ROW_NUMBER() OVER (PARTITION BY hospital_id, location_id ORDER BY location_id) = 2 THEN 0 ELSE 1 END ASC
它将显示所有医院id,至少有两行重复。另一种方式:
SELECT TOP 1 WITH TIES hospital_id --, location_id --if you need
FROM Inventory
ORDER BY
CASE WHEN ROW_NUMBER() OVER (PARTITION BY hospital_id, location_id ORDER BY location_id) = 2 THEN 0 ELSE 1 END ASC
它将显示至少有2行重复的所有
医院id
s。您是否希望更多的医院位置以及更多的医院和位置
;with cte as (
select hospital_id,'' locaation_id, count(location_id) as locationcount from tab2
group by hospital_id
having count(location_id) > 1
union all
select hospital_id, location_id, count(*) as cnt from tab2
group by hospital_id, location_id
having count(*) > 1
)
select * from cte order by hospital_id
在CTE的选择列表中,仅当您需要时,您才可以选择医院id。您是否希望更多的医院位置以及更多的医院和位置
;with cte as (
select hospital_id,'' locaation_id, count(location_id) as locationcount from tab2
group by hospital_id
having count(location_id) > 1
union all
select hospital_id, location_id, count(*) as cnt from tab2
group by hospital_id, location_id
having count(*) > 1
)
select * from cte order by hospital_id
select hospital_id,
location_id
into #temp1
from inventory
where hospital_id in (
select hospital_id
from inventory
group by hospital_id
having count(hospital_id)>1)
group by hospital_id,location_id
select hospital_id
from #temp1
group by hospital_id
having count(hospital_id)>1
在CTE的选择列表中,仅当您需要时,您可以选择医院id。请将当前和预期结果作为文本发布。您的问题不明确。您是否只希望医院出现多次或医院/地点对出现多次?我希望所有医院id至少有两行重复,以及所有地点id有两行重复。请将当前结果和预期结果作为文本发布。您的问题不明确。您只希望医院出现多次还是医院/地点对出现多次?我希望所有医院id至少有两行重复,以及所有地点id有两行重复。这是发布的第一个答案。对于多个地点id,我需要获取具有相应医院id计数的任何一个。i希望所有医院id至少有两个重复行,以及所有位置id有两个重复行。这是发布的第一个答案。对于多个位置id,我需要获得具有相应医院id计数的任何一个。我希望所有医院id至少有两个重复行,以及所有位置id有两个重复行大家都认为这是唯一能产生OP预期效果的答案,其他人则错过了位置grouping@Tanner我认为你投了任何人的票,这是你的先发制人。至少我的查询为给定的示例数据生成了正确的输出。@Tanner。这个问题模棱两可。我碰巧认为我的解释可能是OP的意图,但其他答案是合理的,不值得投反对票。@TimBiegeleisen我不投反对票,虽然我的评论足以突出我的观点,但我希望所有医院id至少有两行重复,以及所有位置id有两行重复。我认为这是唯一能产生OP预期效果的答案,其他人则缺少位置grouping@Tanner我认为你投了任何人的票,这是你的先发制人。至少我的查询为给定的示例数据生成了正确的输出。@Tanner。这个问题模棱两可。我碰巧认为我的解释可能是OP的意图,但其他答案是合理的,不值得投反对票。@TimBiegeleisen我不投反对票,我认为我的评论足以突出我的观点我希望所有医院id至少有两个重复行以及所有位置id有两个重复在一起我希望所有医院id至少有两个重复行以及所有位置id有两个重复在一起我希望所有医院id有至少两个重复行以及所有位置id同时具有两个重复项我希望所有医院id至少具有两个重复行以及所有位置id同时具有两个重复项请编辑更多信息。不鼓励只编写代码和“试试这个”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“试试这个”。我们在这里努力成为知识资源。虽然这段代码可能有助于解决问题,但它没有解释为什么和/或如何回答问题。提供这种额外的环境将大大提高其长期教育价值。请您的回答添加解释,包括适用的限制和假设。我希望所有医院id至少有两行重复,以及所有位置id有两行重复。请编辑更多信息。不鼓励只编写代码和“试试这个”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“试试这个”。我们在这里努力成为知识资源。虽然这段代码可能有助于解决问题,但它没有解释为什么和/或如何回答问题。提供这种额外的环境将大大提高其长期教育价值。请您的回答添加解释,包括适用的限制和假设。我的代码返回所有
医院id
,并包含多个相同的位置id
。你试过了吗?我的代码返回所有的医院id
,其中包含多个相同的位置id
。你试过了吗
select hospital_id,
location_id
into #temp1
from inventory
where hospital_id in (
select hospital_id
from inventory
group by hospital_id
having count(hospital_id)>1)
group by hospital_id,location_id
select hospital_id
from #temp1
group by hospital_id
having count(hospital_id)>1