外部查询仅在其rowcount等于内部子查询时列出

时间:2009-03-09 05:58:32

标签: sql sql-server sql-server-2005

需要有关使用sql server 2005的查询的帮助

我有两张桌子

chargecode
chargeid
orgid

条目

chargeid
itemNo
rate

如果条目表包含多个具有不同chargeid的条目,我需要列出条目表中的所有chargeid 在代码表中列出的具有相同的收费代码。

数据:

100,1,100
100,2,100
100,3,100
101,11,100
101,12,100

输入

1,x1,1
1,x2,2
2,x3,2
11,x4,1
11,x5,1

使用上述数据,它查询应列出chargeids 1和2而不是11。

我知道了条目中有多少行满足条件,但是我没有得到这些条件

select count (distinct chargeId)
from entry where chargeid in (select chargeid from code where chargecode = (SELECT A.chargecode
from code as A join code as B
ON A.chargecode = B.chargeCode and A.chargetype = B.chargetype and A.orgId = B.orgId AND A.CHARGEID = b.CHARGEid
group by A.chargecode,A.orgid
having count(A.chargecode) > 1)
) 

1 个答案:

答案 0 :(得分:2)

首先:我为我完全不准确的原始答案道歉。

您的问题的解决方案是自我加入。如果要从同一个表中选择多个行,则使用自联接。在我们的例子中,我们想要选择两个具有相同费用代码的费用ID:

SELECT DISTINCT c1.chargeid, c2.chargeid FROM code c1
JOIN code c2 ON c1.chargeid != c2.chargeid AND c1.chargecode = c2.chargecode
JOIN entry e1 ON e1.chargeid = c1.chargeid
JOIN entry e2 ON e2.chargeid = c2.chargeid
WHERE c1.chargeid < c2.chargeid

解释:

首先,我们从'code'中选择任意两个费用ID。 DISTINCT避免重复。我们确保它们是两个不同的 ID,并且它们映射到相同的费用代码。

然后我们加入'entry'(两次)以确保它们都出现在条目表中。

这种方法给出(对于你的例子)对(1,2)和(2,1)。所以我们也坚持订购;正如你所描述的那样,这会将结果设置为(1,2)。