Sql 基于条件的计数值,结果不正确

Sql 基于条件的计数值,结果不正确,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,查询返回court=MA的128行,因此mafiledday计数应为128 结果不正确 /******SSMS中SelectTopNRows命令的脚本******/ SELECT dbo.tblCourtRec.CourtLtrsCurr as [Court], dbo.tblSentences.CaseNo as [CaseNo], dbo.tblSentences.DispDate as [DispDate], dbo.tblSentences.DispDa

查询返回court=MA的128行,因此mafiledday计数应为128

结果不正确

/******SSMS中SelectTopNRows命令的脚本******/

SELECT 
    dbo.tblCourtRec.CourtLtrsCurr as [Court],
    dbo.tblSentences.CaseNo as [CaseNo],
    dbo.tblSentences.DispDate as [DispDate],
    dbo.tblSentences.DispDate as [DispMethod],
    -- Get totals by Court
    (SELECT count(caseno) 
     FROM dbo.tblCaseFiling 
     WHERE filedate = CASE 
                         WHEN datepart(weekday, getdate()) = 2 
                           THEN datediff(day, 3, getdate()) 
                         ELSE datediff(day, 1, getdate()) 
                      END 
       AND tblcourtrec.CourtLtrsCurr = 'MA') AS MAFiledDaily
FROM 
    [MF_COURT].[dbo].[tblSentences]
INNER JOIN 
    dbo.tblCourtRec ON dbo.tblCourtRec.CaseNo = dbo.tblSentences.CaseNo
WHERE
    dbo.tblCourtRec.CourtLtrsCurr = 'MA'
    AND YEAR(dbo.tblSentences.DispDate) = YEAR(getdate()) 
    AND MONTH(dbo.tblSentences.DispDate) = MONTH(getdate())
ORDER BY
    dbo.tblCourtRec.CourtLtrsCurr
样本数据:

Court   CaseNo  DispDate        DispMethod  MAFiledDaily
MA      M1004861    01/05/2015  DISM        269
MA      M1354445    01/05/2015  REVW        269
MA      M1354445    01/05/2015  DISM        269
MA      M1363238    01/05/2015  DISM        269
MA      M1365908    01/05/2015  NAOG        269
最新答案

下面是重新格式化的子查询,只是为了帮助我更好地理解它:

-- Get totals by Court
(select count(caseno) 
 from   dbo.tblCaseFiling 
 where  filedate = CASE 
         WHEN datepart(weekday,getdate())= 2 
         THEN datediff(day,3,getdate()) 
         ELSE datediff(day,1,getdate()) 
       END  
  and tblcourtrec.CourtLtrsCurr = 'MA'
 ) 
假设您的filedate比较是正确的,我认为问题仍然是您在子查询之外引用了一个表,但没有以限制您在子查询中检索的记录的方式引用

外部查询引用表tblCourtRec,并限制返回到dbo.tblCourtRec.CourtLtrsCurr='MA'的记录

您的子查询也引用了tblCourtRec,但它引用的是外部查询中的值。子查询中返回的记录与外部查询中的特定记录之间没有链接。您确实在外部查询中引用了该记录,但没有以任何方式将其连接到tblCaseFiling

假设tblCaseFiling中有一些数据表明该文件处于什么状态,您需要这样一个条款:

 where [file date comparison]
 and   tblCaseFiling.CourtFiledIn = 'MA'
。。。或者像这样,这就是所谓的相关子查询:

 where [file date comparison]
 and   tblCaseFiling.CourtFiledIn = tblCourtRec.CourtLtrsCurr

您可以设置sql fidle吗?或者至少是sql的其余部分?请编辑您的问题并显示第一个查询的全部内容。安,谢谢您的帖子。我用更干净的代码更新了我的帖子。