您可以通过 CTE 做到这一点。
我使用两个参数设置此 CTE,一个是您寻求的条件,另一个是要查找的最大组合条件数(在您的情况下为 1)。
DECLARE @myTable TABLE (Id VARCHAR(1), ClaimID INT, Condition VARCHAR(100))
INSERT INTO @myTable (Id, ClaimID, Condition)
SELECT 'A',14234,'Hypertension' UNION ALL
SELECT 'A',14234,'Diabetes' UNION ALL
SELECT 'A',63947,'Diabetes' UNION ALL
SELECT 'B',23853,'Hypertension'
DECLARE @Condition VARCHAR(100)
DECLARE @MaxConditions TINYINT
SET @Condition='Hypertension'
SET @MaxConditions=1
; WITH CTE AS
(
SELECT *, COUNT(2) OVER(PARTITION BY ClaimID) AS CN
FROM @myTable T1
WHERE EXISTS (SELECT 1 FROM @myTable T2 WHERE T1.ClaimID=T2.ClaimID AND T2.Condition=@Condition)
)
SELECT *
FROM CTE
WHERE CN<=@MaxConditions
如果您不关心绒毛,并且只希望所有 ClaimID 都具有一个条件,而不管它是哪种条件,请使用它。
DECLARE @myTable TABLE (Id VARCHAR(1), ClaimID INT, Condition VARCHAR(100))
INSERT INTO @myTable (Id, ClaimID, Condition)
SELECT 'A',14234,'Hypertension' UNION ALL
SELECT 'A',14234,'Diabetes' UNION ALL
SELECT 'A',63947,'Diabetes' UNION ALL
SELECT 'B',23853,'Hypertension'
DECLARE @MaxConditions TINYINT
SET @MaxConditions=1
; WITH CTE AS
(
SELECT *, COUNT(2) OVER(PARTITION BY ClaimID) AS CN
FROM @myTable T1
)
SELECT *
FROM CTE
WHERE CN<=@MaxConditions