2

2 つの SQL クエリがあり、どちらも異なる ID のカウントを取得します。

select @cntCM_CMQ = count(*)
from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 3    -- CMQ

select @cntCM_PRWK = count(*)
from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 1    -- PAPERWORK

それらを単一の選択に(おそらくCASEステートメントで)組み合わせることができるはずですが、それをクラックできないようです。

4

5 に答える 5

6

このようなもの?

select sum(case when ws.ID_WorkflowType = 1 then 1 else 0 end) as cntCM_PRWK
     , sum(case when ws.ID_WorkflowType = 3 then 1 else 0 end) as cntCM_CMQ
from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID
于 2012-12-30T20:28:25.280 に答える
4
select 
SUM(Cast(Case when ws.ID_WorkflowType = 3 then 1 else 0 end as int) as CMQ
,SUM(Cast(Case when ws.ID_WorkflowType = 1 then 1 else 0 end as int) as Paperwork

from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID 
于 2012-12-30T20:29:03.453 に答える
3
select 
    @cntCM_CMQ = count(case when ws.ID_WorkflowType = 3 then ws.ID_WorkflowType end)
    , @cntCM_PRWK = count(case when ws.ID_WorkflowType = 1 then ws.ID_WorkflowType end)
from 
    dbo.CaseWorkflow cw 
    join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
    join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where 
    CMSUID = @nSUID 
    and ws.ID_WorkflowType in (1, 3)
于 2012-12-30T20:27:01.110 に答える
3

これにはコツがあります。基本的に、関心のある行の値Caseを選択してから、カウントを取得するために使用します。ケースのデフォルトは、ケースが一致しない場合であり、によって無視されます。1SumnullSum

Select
  @cntCM_CMQ = Sum(Case ws.ID_WorkflowType When 3 Then 1 End),
  @cntCM_PRWK = Sum(Case ws.ID_WorkflowType When 1 Then 1 End) 
From
  dbo.CaseWorkflow cw 
    inner join 
  vew_CasePersonnelSystemIDs vcps 
    on cw.ID_Case = vcps.ID_Case
    inner join 
  dbo.WorkflowStates ws 
    on ws.ID_WorkflowState = cw.ID_WorkflowState
Where
  CMSUID = @nSUID
于 2012-12-30T20:27:22.880 に答える
1

他の投稿に似た代替案。

Bob Duells の投稿は、おそらく最も読みやすいものです。

SELECT 
    [cntCM_PRWK]    = COUNT(CASE WHEN ws.ID_WorkflowType = 1 THEN ws.ID_WorkflowState ELSE NULL END),
    [cntCM_CMQ]     = COUNT(CASE WHEN ws.ID_WorkflowType = 3 THEN ws.ID_WorkflowState ELSE NULL END)
FROM 
    dbo.CaseWorkflow cw 
    INNER JOIN vew_CasePersonnelSystemIDs vcps 
            ON cw.ID_Case = vcps.ID_Case
    INNER JOIN dbo.WorkflowStates ws 
            ON ws.ID_WorkflowState = cw.ID_WorkflowState
WHERE CMSUID = @nSUID
于 2012-12-30T20:53:16.023 に答える