我有一个表 - 包含claimID和procedureCode列 - 可以有多个procedureCode值分配给claimID - 我有一个查询,我说 -
SELECT claimID FROM #table WHERE procedureCode IN ('1234','6789')
这显然让我回复所有带有这些procedureCodes的claimIDs - 返回的claimIDs也可能包含其他的procedureCodes - 所以我需要做的就是说只返回claimIDs,其中只有procedureCodes' 1234&# 39;和' 6789'存在 - 没有与claimIDs相关联的其他procedureCodes。
确定 - 在下面 - 我需要一个claimIDs列表WHERE procedureCode IN(' 1234',' 5678') - 并且只有那些代码 - 所以claimID 1符合资格但不符合claimID 2作为claimID 2有另一个不在的procedureCode(' 1234',' 5678')
CREATE TABLE #claims (claimID int, procedureCode varchar(10))
INSERT INTO #claims
SELECT 1, '1234'
UNION
SELECT 1, '5678'
UNION
SELECT 2, '4455'
UNION
SELECT 2, '1234'
UNION
SELECT 3, '8899'
UNION
SELECT 3, '6677'
SELECT * FROM #claims
这是我的真实"查询 - 我想说 - 通过以下内容 - 带回所有行代码所在的行(' 99281',' 99282',' 99283',&# 39; 99284',' 99285') - 但现在需要说 - 只收回ClaimNo所声明的声明(' 99281',' 99282&# 39;,' 99283',' 99284',' 99285')与它相关联,只有那些代码 - 没有其他 - 有意义吗?
SELECT DISTINCT procedureCode,
COUNT(claimNo),
SUM(CAST(a.amount as money))/COUNT(claimNo) AS [837_Claim_Amt] ,
SUM(CAST(b.ClaimAmount as money))/COUNT(claimNo) AS [835_Claim_Amt],
SUM(CAST(b.ClaimPaid as money))/COUNT(claimNo) AS [835_Claim_Paid_Amt]
FROM ##Claims837 a
JOIN ##835Claims b ON a.claimNo = b.ClaimID
JOIN edi_paidclaimlines p ON b.ID = p.claimID
WHERE p.procedureCode IN ('99281', '99282', '99283', '99284', '99285')
GROUP BY procedureCode
ORDER BY procedureCode
答案 0 :(得分:0)
如果您只有很少的值,这是最有效且最易读的方式:
SELECT t1.claimID FROM #claims t1
WHERE t1.procedureCode IN ('1234','6789')
AND NOT EXISTS
(
SELECT 1 FROM #claims t2
WHERE t2.ClaimID = t1.ClaimID
AND t2.procedureCode NOT IN ('1234','6789')
)
以下是您的示例数据:http://sqlfiddle.com/#!6/d41d8/20800/0
查询不会产生任何记录,因为所有匹配的claimID
都有另一个procedureCode
,而不是('1234','6789')。
答案 1 :(得分:0)
试试这个:
select *
into #onlyIncluded
from #table
where ProcedureCode in ('1234','6789')
select distinct claimid
into #thoseToExclude
from #table
where ProcedureCode not in ('1234','6789')
select distinct claimid
into #Final
from #onlyIncluded
where claimid not in (select claimid from #thoseToExclude)
答案 2 :(得分:0)
也许有点简单...
select ClaimID
from #claims
group by ClaimID
-- the count of claims in your list match the total count of claims
having count(*) = sum(case when procedureCode IN ('1234','6789') then 1 else 0 end)
答案 3 :(得分:0)
SELECT DISTINCT ClaimId FROM #table WHERE ProcedureCode IN ('1234','6789') EXCEPT SELECT ClaimId FROM #table WHERE ProcedureCode NOT IN ('1234','6789')