需要有关使用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)
)
答案 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)。