0

我知道标题令人困惑,但我需要帮助确定哪些法庭案件中与该案件相关的所有孩子都具有 programClosureDate。我可以运行这个查询:

CaseInfo Table
CaseID,
CaseNumber,
CaseName

CaseChild Table
CaseID,           FK to CaseInfo
ChildPartyID, FK to PartyID in Party table
ProgramClosureDate

Party Table
ID,
PartyID,
Firstname,
LastName

SELECT           ci.CaseNumber, ci.CaseName, p.firstname+' '+p.lastname AS child, 
                 ci.programClosureDate
FROM             CaseInfo ci JOIN
                 CaseChild cc ON ci.CaseID = cc.CaseID JOIN
                 Party p ON cc.ChildPartyID = p.PartyID

WHERE            cc.ProgramClosureDate IS NOT NULL                    
ORDER BY         ci.CaseName

但这只是给了我有 programClosureDate IS NOT NULL 的孩子。
任何帮助是极大的赞赏。安迪

4

3 回答 3

0

你可以使用这个 WHERE 条件

Where CaseID not in (Select CaseID  from CaseChild ProgramClosureDate IS NULL )
于 2013-01-05T19:14:24.917 回答
0

此查询为您提供所有孩子都有关闭日期的情况。

select CaseId
from CaseChild cc
group by CaseId
having count(*) = count(cc.ProgramClosureDate)

它使用了一个小技巧。. . count(*)是每种情况下的记录count(cc.ProgramCLosureDate)数,是非空关闭日期的数量。当所有案件都结案时,这些都是相同的。

如果您想了解更多信息,可以加入:

select ci.CaseNumber, ci.CaseName, p.firstname+' '+p.lastname AS child, 
       ci.programClosureDate
from (select CaseId
      from CaseChild cc
      group by CaseId
      having count(*) = count(cc.ProgramClosureDate)
     ) closed join
     CaseInfo ci
     on closed.CaseId = ci.CaseId join
     Party p
     ON cc.ChildPartyID = p.PartyID
order by ci.CaseName

上面的子查询用于定义其余查询的总体。

于 2013-01-05T19:23:04.530 回答
0

另一种方法...我不确定建议的不同方法的性能,最好进行测试。

;WITH OpenCases AS
(
    SELECT DISTINCT CaseID
    FROM CaseChild
    WHERE ProgramClosureDate IS NULL
)
SELECT   ci.CaseNumber
        ,ci.CaseName
        ,child  = p.firstname+' '+p.lastname
        ,ci.programClosureDate
FROM CaseInfo   ci 
JOIN CaseChild  cc  ON ci.CaseID = cc.CaseID
JOIN OpenCases  oc  ON ci.CaseID != oc.CaseID
JOIN Party      p   ON cc.ChildPartyID = p.PartyID
WHERE cc.ProgramClosureDate IS NOT NULL                    
ORDER BY ci.CaseName
于 2013-01-06T06:54:07.380 回答