2011-07-22 20 views
0

ねえので、私のクエリは、今同じ列に2行を組み合わせる

ALTER PROCEDURE [SSRS].[VolumeCustomers] 
@UserID int 
AS 

select 
    CaseTypeName, 
    COUNT(CaseNo) as CaseCount, 
    'Open' as indicator 

FROM ORDERS.ApCase AC with (NOLOCK) 
    join ORDERS.CaseType CT (NOLOCK) on CT.CaseTypeID = AC.CaseTypeID 
    join WORKFLOW.WorkflowHistory WH (NOLOCK) on WH.EntityID = AC.CaseID and TableID = dbo.GetTableID('ApCase', 'ORDERS') and WH.Active = 1 
    inner join WORKFLOW.WorkflowStep WS (NOLOCK) on WS.WorkflowStepID = WH.WorkflowStepID and WS.NextStepID is null 
where (AC.Active =1 and AC.CreatedDate >= DATEADD(day,-7,getdate()) and AC.CreatedDate < GETDATE()) 
Group By CaseTypeName 

union 
select 
    CaseTypeName, 
    COUNT(Caseno) as CaseCount, 
    'Closed' as indicator 

FROM ORDERS.ApCase AC with (NOLOCK) 
    join ORDERS.CaseType CT (NOLOCK) on CT.CaseTypeID = AC.CaseTypeID 
    join WORKFLOW.WorkflowHistory WH (NOLOCK) on WH.EntityID = AC.CaseID and TableID = dbo.GetTableID('ApCase', 'ORDERS') and WH.Active = 1 
    join WORKFLOW.WorkflowStep WS (NOLOCK) on WS.WorkflowStepID = WH.WorkflowStepID and WS.NextStepID is not null 
where (AC.Active =1 and AC.CreatedDate >= DATEADD(day,-7,getdate()) and AC.CreatedDate < GETDATE()) 
GROUP BY CaseTypeName 
Order by CaseCount desc 

あるとput outは

Cytogenetics 2 All 
Cytogenetics 1 Open 
Flow Tech 1 All 
Flow Tech 1 Open 
Surgical 1 All 
Surgical    1 Open 

ですが、私は、細胞遺伝学は、ハイテクを流したい、とすべての外科が表示されます同じ行の 例:

Cytogenetics 2 All 1 Open 
Flow Tech   1  All  1 Open 
Surgical    1 All  1  Open 

どのように私はこれを反映する私のクエリを編集するには?

+0

? –

+0

クエリに「クローズ」があります。あなたの出力はそれが 'All'だと言います。それはタイプミスですか? –

+0

はい、それは誤って入力する必要があります – MDWong

答えて

1

これは機能しますか?値がされたクエリから来た

SELECT A.*, B.CaseCount, B.indicator 
    FROM (<First Part of Union in Question>) AS A INNER JOIN 
     (<Second Part of Union in Question>) AS B ON A.CaseTypeName = B.CaseTypeName 
+0

私はこれを試しましたが、私はA.を追加するとき*それは私にエラーを与える "列の接頭辞 'a'は、クエリで使用されるテーブル名またはエイリアス名と一致しません" – MDWong

+0

私はテーブルエイリアス 'A'が上記のSQLで定義されているので、なぜそれを得るのかは分かりません。とにかく、ypercubeの答えがもっと簡単なクエリになるようです。 – James

+0

それは私にとって有効な解決策のようです。そして時にはこれはより速い(JOINのため)。私の解決策は、すべてのデータを収集し、 'SELECT '段階の' CASE'でそれらを分けなければなりません。 –

0
SELECT 
    CaseTypeName, 
    COUNT(CASE WHEN WS.NextStepID IS NULL  THEN Caseno END) AS CaseCountOpen, 
    COUNT(CASE WHEN WS.NextStepID IS NOT NULL THEN Caseno END) AS CaseCountClosed, 
    COUNT(CaseNo) AS CaseCountAll 

FROM ORDERS.ApCase AC with (NOLOCK) 
    JOIN ORDERS.CaseType CT (NOLOCK) 
     ON CT.CaseTypeID = AC.CaseTypeID 
    JOIN WORKFLOW.WorkflowHistory WH (NOLOCK) 
     ON WH.EntityID = AC.CaseID 
     AND TableID = dbo.GetTableID('ApCase', 'ORDERS') 
     AND WH.Active = 1 
    JOIN WORKFLOW.WorkflowStep WS (NOLOCK) 
     ON WS.WorkflowStepID = WH.WorkflowStepID 
WHERE AC.Active = 1 
    AND AC.CreatedDate >= DATEADD(day,-7,getdate()) 
    AND AC.CreatedDate < GETDATE() 
GROUP BY CaseTypeName 
ORDER BY CaseCountAll DESC 
+0

DUDDEEEEE感謝マン!私は誰かにselectステートメントでそれを数える理由を説明するように頼んだ。 – MDWong

関連する問題