2011-07-22 101 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 

和出放爲

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

我不確定爲什麼你會這樣做,因爲在上面的SQL中定義了表別名「A」;看起來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