Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从包含多个where子句的多个表中进行选择_Sql_Stored Procedures - Fatal编程技术网

Sql 从包含多个where子句的多个表中进行选择

Sql 从包含多个where子句的多个表中进行选择,sql,stored-procedures,Sql,Stored Procedures,我正在尝试编写一个存储过程,该过程将给出一个表中未删除的所有案例的计数,并按另一个表中的CaseStatusID分组,但仅列出具有CaseStatusID且未删除的案例。我还希望它返回任何与它没有大小写关系的CaseStatusID(即计数为0) 到目前为止我已经试过了 Create Table #tCaseStatus (CaseStatusID int,CaseStatusDesc varchar(200) ) declare @NofCases int declare @Cas

我正在尝试编写一个存储过程,该过程将给出一个表中未删除的所有案例的计数,并按另一个表中的
CaseStatusID
分组,但仅列出具有
CaseStatusID
且未删除的案例。我还希望它返回任何与它没有大小写关系的
CaseStatusID
(即计数为0)

到目前为止我已经试过了

    Create Table #tCaseStatus   (CaseStatusID int,CaseStatusDesc varchar(200) )
declare @NofCases int
declare @CaseStatusID int
declare @CaseStatusDesc varchar(200)

BEGIN
    INSERT #tCaseStatus 
    Select CaseStatusID, CaseStatusDesc From dbo.CaseStatus Where IsDeleted = 0
    Select @NofCases = Count(*) From #tCaseStatus
    While (@NofCases > 0)
    Begin
        Select Top (1) @CaseStatusID = CaseStatusID, @CaseStatusDesc = CaseStatusDesc from #tCaseStatus 
        SELECT    CaseStatusDesc, Count(CaseID) AS CountCases
        FROM      Cases inner join #tCaseStatus on Cases.CaseStatusID = #tCaseStatus.CaseStatusID
        WHERE     (IsDeleted = 0) AND Cases.CaseStatusID = @CaseStatusID
        Group by  #tCaseStatus.CaseStatusDesc
        Set @NofCases = @NofCases - 1
        Delete Top(1) from #tCaseStatus
    End
END

这将返回正确的案例,但不包括任何计数为0的CaseStatusDesc

SELECT     CaseStatus.CaseStatusDesc, COUNT(Cases.CaseID) AS CaseCount
FROM         Cases FULL OUTER JOIN
                  CaseStatus ON Cases.CaseStatusID = CaseStatus.CaseStatusID
WHERE     (CaseStatus.IsDeleted = 0) AND
                  (Cases.IsDeleted = 0)
GROUP BY CaseStatus.CaseStatusDesc, CaseStatus.CaseStatusID
ORDER BY CaseStatus.CaseStatusID

这将返回所有CaseStatusDesc,甚至是已删除的CaseStatusDesc

SELECT CaseStatus.CaseStatusDesc, COUNT(CASE
                                        WHEN CaseStatus.IsDeleted = 0 THEN 'ok'
                                        WHEN Cases.IsDeleted = 0 THEN 'ok'
                                        Else null                                       
                                    END) AS [Case] 
FROM   Cases  FULL OUTER JOIN CaseStatus ON Cases.CaseStatusID = CaseStatus.CaseStatusID
GROUP BY CaseStatus.CaseStatusDesc, CaseStatus.CaseStatusID
Order By CaseStatus.CaseStatusID asc

但是我似乎不能得到想要的结果

这就是你想要的吗

select 
    casestatus.casestatusid,
    casestatusdesc,
    COUNT(caseid)
from casestatus
    left join cases 
        on casestatus.casestatusid = cases.casestatusid
        and cases.isdeleted=0
where
    casestatus.isdeleted=0
group by    
    casestatus.casestatusid,
    casestatusdesc

正是我想要的非常感谢