2014-02-24 47 views
1

是否有可能這兩個查詢合併爲一個查詢合併查詢在一個查詢

SELECT COUNT(IMA.FKRiskID) AS RiskCountWithoutPlan 
FROM Rpt_ImpactAssessment IMA 
WHERE IMA.FKItemID = 38 
    AND IMA.ImpactCurPIDLevel LIKE '%High%' 
    AND NOT EXISTS 
    ( 
     select 1 
     from RM_LinkActionToPlan LAP     
     where IMA.FKPlanID = LAP.PlanID 
    ) 
SELECT COUNT(IMA.FKRiskID) AS RiskCountWithPlan 
FROM Rpt_ImpactAssessment IMA 
WHERE IMA.FKItemID = 38 
    AND IMA.ImpactCurPIDLevel LIKE '%High%' 
    AND EXISTS ( 
        select 1 
        from RM_LinkActionToPlan LAP     
        where IMA.FKPlanID = LAP.PlanID 
      ) 
+1

你是不是很具體的你想要得到的結果是什麼。我認爲你可以刪除存在而不存在,但我不認爲這是你想要的結果。 –

+0

合併是什麼意思?你想寫一個查詢來獲得兩個不同條件的不同計數? – Nilesh

回答

0

試試這個。它使用虛擬數據爲我工作(我將發佈查詢作爲評論)。這會給你兩列:第一是RiskCountWithoutPlan二是RiskCountWithPlan

SELECT 
    SUM([rcwop]) [RiskCountWithoutPlan], 
    SUM([rcwp]) [RiskCountWithPlan] 
FROM 
(
    SELECT 
     CASE WHEN LAP.PlanID IS NULL THEN 1 ELSE 0 END [rcwop], 
     CASE WHEN LAP.PlanID IS NOT NULL THEN 1 ELSE 0 END [rcwp] 
    FROM 
     Rpt_ImpactAssessment IMA 
     LEFT JOIN RM_LinkActionToPlan LAP ON IMA.FKPlanID = LAP.PlanID    
    WHERE IMA.FKItemID = 38 
    AND IMA.ImpactCurPIDLevel LIKE '%High%' 
) tbl 

希望這是你所期待的。

斯圖


DECLARE @Rpt_ImpactAssessment TABLE (
    FKRiskID INT, 
    FKItemID INT, 
    FKPlanID INT, 
    ImpactCurPIDLevel NVARCHAR(20) 
) 

DECLARE @RM_LinkActionToPlan TABLE (
    FKRiskID INT, 
    FKItemID INT, 
    PlanID INT, 
    ImpactCurPIDLevel NVARCHAR(20) 
) 


INSERT INTO @Rpt_ImpactAssessment VALUES (1, 38, 2, 'High') 
INSERT INTO @RM_LinkActionToPlan VALUES (1, 38, 2, 'High') 

INSERT INTO @Rpt_ImpactAssessment VALUES (1, 38, 3, 'High') 
INSERT INTO @RM_LinkActionToPlan VALUES (1, 38, 3, 'High') 


SELECT 
    SUM([rcwop]) [RiskCountWithoutPlan], 
    SUM([rcwp]) [RiskCountWithPlan] 
FROM 
(
    SELECT 
     CASE WHEN LAP.PlanID IS NULL THEN 1 ELSE 0 END [rcwop], 
     CASE WHEN LAP.PlanID IS NOT NULL THEN 1 ELSE 0 END [rcwp] 
    FROM 
     @Rpt_ImpactAssessment IMA 
     LEFT JOIN @RM_LinkActionToPlan LAP ON IMA.FKPlanID = LAP.PlanID    
    WHERE IMA.FKItemID = 38 
    AND IMA.ImpactCurPIDLevel LIKE '%High%' 
) tbl 
+0

啊,不能添加它作爲評論。我會更新答案。 – Stuart

+0

你是對的唯一的事情是我們必須添加鮮明的過濾選擇 \t \t DISTINCT IMA.FKRiskID, CASE WHEN LAP.PlanID爲null,則1 ELSE 0 END [rcwop], CASE WHEN LAP.PlanID IS NOT NULL THEN 1 ELSE 0 END [rcwp] –

+0

避免DISTINCT。這被認爲是不好的做法。請閱讀http://www.onlamp.com/pub/a/onlamp/2004/09/30/from_clauses.html瞭解更多信息。 – Stuart