我們通過三個步驟來做到這一點。第一步是找到記錄失敗「沒有其他前導數字」的要求。第二步是找到滿足「必須從8開始」的記錄。第三步是將兩組數據匹配到一個exclusion join,以便我們從步驟2中取出該組並排除步驟1中的組:
我們還需要知道procedureCode
列的數據類型。知道一點關於CPT codes,我期望char(5)
或類似是最合適的選擇,這取決於你如何處理修飾符。如果這是你如何保存它,那麼這應該工作:
With BadClaims As (--Step 1
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS (--Step 2
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已經存儲了它作爲整數/數字字段。如果是這樣,這應該工作:
With BadClaims As (--Step 1
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS (--Step 2
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
這是一個長的形式,解釋這裏發生了什麼。您還可以簡化這些步驟製作成單個自聯接:
SELECT distinct t1.claimID
FROM [Table] t1
LEFT JOIN [Table] t2 ON t2.claimID = t1.ClaimID and t2.procecureCode NOT LIKE '8%'
WHERE t1.procedureCode LIKE '8%' and t2.claimID IS NULL
使用WHERE NOT EXISTS子句。 – 2015-03-31 16:53:27
claimID其中所有procedureCode都以'8'開頭? – mxix 2015-03-31 16:53:51
「1 85025」記錄呢? – 2015-03-31 16:54:00