我正在尝试识别所有父级子记录的所有记录,因为我需要将这些记录包装到父级别。例如,如果您想象两个表:
tblParentChild
:
Id Code ParentCode
-------------------------------
1 B001
2 P001
3 B002 B001
4 B003 B001
5 P002 P001
6 P003 P001
7 P004 P001
tblData
:
Header Id Code
-------------------
1 P002
2 B002
2 B003
3 P003
3 P004
4 P002
4 P003
4 P004
所以在这个例子中我想要返回标题2和4,因为它们存在所有子记录。我一直在将这两个表中的子记录连接起来并比较结果(P002; P003; P004),但我确信必须有更好的方法来实现这个目标吗?
答案 0 :(得分:0)
它有点难看,可能像垃圾一样,但我认为这样可行:
; WITH parentCTE (ParentCode, PCCount) AS
(SELECT ParentCode, PCCount = count(*)
FROM #tblParentChild
WHERE ParentCode IS NOT NULL
GROUP BY ParentCode)
SELECT HeaderID
FROM #tblData d
INNER JOIN #tblParentChild pc ON pc.Code = d.Code
GROUP BY pc.ParentCode, d.HeaderID
HAVING count(pc.Code) = (SELECT PCCount FROM parentCTE WHERE ParentCode = pc.ParentCode)