SQL - 如何返回某些行与给定列表匹配的整个行集

Posted

技术标签:

【中文标题】SQL - 如何返回某些行与给定列表匹配的整个行集【英文标题】:SQL - How to return entire row sets where some rows match a given list 【发布时间】:2016-06-22 13:23:31 【问题描述】:

假设有一张医疗记录表。每次访问都有一个唯一的 ID,但由几行组成,对应于为访问提供的各种代码/服务。 例如,对于每个唯一的过程代码“123”、“456”和“789”,可能有 3 行的 claimID 为“John”; “简”的 15 行代码; “大卫”的 6 行...

ID      Code
John    123
John    456
John    789
Jane    123
Jane    456
Jane    789
Jane    321
Jane    654
David   123
David   456
David   789
David   987

我有一个包含 50 个唯一程序代码的列表,并且想要返回整个 set 声明行(即“John”的 所有 行),其中这些代码的任意组合50 个代码已与另一个代码一起计费,但不是与它们自己计费(“123”与“321”,但不是“123”与“123”)。如果“123”在我的 50 个列表中,但“456”和“789”不在,它应该返回一组“John”声明,因为我的 50 个代码中只有一个存在。我希望这是有道理的。

Positive Result Codes
123
321
987

查询应返回所有 5 个 Jane 行(123 和 321)和所有 4 个 David 行(123 和 987)。

ID      Code
Jane    123
Jane    456
Jane    789
Jane    321
Jane    654
David   123
David   456
David   789
David   987

【问题讨论】:

请以表格形式添加示例数据和预期输出。 对不起,我是全新的。我没有看到任何表格降价。 这是一篇很棒的文章,解释了如何发布此类内容。 spaghettidba.com/2015/04/24/… 使用 4 个空格使一行具有代码样式。或者标记这些行并单击问题编辑器中的代码按钮。例如看这篇文章:***.com/q/8495886/575376 【参考方案1】:

试试这个代码:

;WITH Visits as (
    SELECT claimID,COUNT(DISTINCT Code) as CNT FROM tbl_Visits
    WHERE Code in (123,123,321,987)
    GROUP by claimID
    HAVING COUNT(DISTINCT Code) > 1
)
SELECT * FROM tbl_Visits
WHERE claimID in (SELECT claimID FROM Visits);

【讨论】:

以上是关于SQL - 如何返回某些行与给定列表匹配的整个行集的主要内容,如果未能解决你的问题,请参考以下文章

.NET:返回给定要匹配的整个单词列表的字符串列表

SQL Server:分组重复行集

SQL 游标

通过 ASP.NET Core Web API 使用存储过程从 SQL Server 返回多个行集

MS SQL语句declare游标的求助

当这些行与列表中的所有值匹配时,从 Python 中的 DF 中选择行