2012-02-21 110 views
1
declare @Temp table 
(CaseID int, 
PrimaryClientID int, 
Category int 
) 



INSERT INTO @Temp 

SELECT 
     [casCaseID], 
     [casPrimaryClientID], 


    CASE 
     WHEN (SELECT COUNT(evecaseid) FROM MPS3.dbo.Events where evecaseid=cascaseid and eveworkflowid=960)>0 THEN 1 
     WHEN (SELECT COUNT(CTC2.ctcCaseID)FROM MPS3.dbo.ClientToCase CTC1 INNER JOIN MPS3.dbo.ClientToCase CTC2 ON CTC1.ctcClientID=CTC2.ctcClientID INNER JOIN MPS3.dbo.Events E2 ON CTC2.ctcCaseID=E2.eveCaseID AND E2.eveWorkflowID=960 WHERE CTC1.ctcCaseID=casCaseID AND CTC2.ctcCaseID < CTC1.ctcCaseID)>0 THEN 2 
     ELSE 3 
    END AS [FPCategory] 



FROM [MPS3].[dbo].[Cases] 

    WHERE 

    casRecontactDate BETWEEN '2012-01-01' AND '2012-01-01' 
    AND 
    casCaseType = 'm' 

ORDER BY FPCategory 

SELECT 
Category AS [CategoryType], 
COUNT(Category) AS [CategoryTotal] 

CASE 

WHEN [Category] = 0 or [Category] = 0 THEN 0 

else ([Category]+0.0)/COUNT[Category]) 

END AS [Percentage], 


FROM 
@Temp 

GROUP BY 

Category 

引用一个case语句来简化我已经把,我创建了一个临时表,其中列出了一个数据库的情况。我已经申请了一个案例陈述,然后将这些案例分为3种类型,1,2或3。从临时表外

在下面的select语句中,我希望有另一列显示每个类别的百分比总数。 我的问题是,我不能使用前面的case语句中的别名“FPCategory”,因为它还没有出现在后面的语句中使用有效的列名称。

谢谢!第一

+0

欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)格式和语法突出显示它! – 2012-02-21 10:44:36

+1

谢谢Marc_s&Arion,我会确保我下次再做。 – TJH 2012-02-21 10:48:37

回答

0

第一件事,让我们与那些讨厌的子查询做掉&查询转换为CTE(未经测试,因为我看不到你的架构):

WITH EventCounts (casCaseID, EventCount) 
      AS (SELECT evecaseid , 
         COUNT(evecaseid) 
       FROM  MPS3.dbo.Events 
       WHERE eveworkflowid = 960 
      ), 
     ClientToCaseCounts (casCaseID, ClientToCaseCount) 
      AS (SELECT CTC1.ctcCaseID , 
         COUNT(CTC2.ctcCaseID) 
       FROM  MPS3.dbo.ClientToCase CTC1 
         INNER JOIN MPS3.dbo.ClientToCase CTC2 ON CTC1.ctcClientID = CTC2.ctcClientID 
         INNER JOIN MPS3.dbo.Events E2 ON CTC2.ctcCaseID = E2.eveCaseID 
                 AND E2.eveWorkflowID = 960 
       WHERE CTC2.ctcCaseID < CTC1.ctcCaseID 
      ), 
     BaseData ([casCaseID], [casPrimaryClientID], [FPCategory]) 
      AS (SELECT [casCaseID] , 
         [casPrimaryClientID] , 
         CASE WHEN EventCounts.EventCount > 0 THEN 1 
          WHEN ClientToCaseCounts.ClientToCaseCount > 0 THEN 2 
          ELSE 3 
         END AS [FPCategory] 
       FROM  [MPS3].[dbo].[Cases] C 
         LEFT OUTER JOIN EventCounts ON C.[casCaseID] = EventCounts.casCaseID 
         LEFT OUTER JOIN ClientToCaseCounts ON C.[casCaseID] = ClientToCaseCounts.casCaseID 
       WHERE casRecontactDate BETWEEN '2012-01-01' 
             AND  '2012-01-01' 
         AND casCaseType = 'm' 
      ) 
    SELECT [FPCategory] , 
      COUNT([casCaseID]) AS TotalCases 
    FROM BaseData 
    GROUP BY [FPCategory] 

现在,我注意到你在哪里上FPCategory分组在你最后的查询中,这意味着你的结果会有多个casCaseID的每个FPCategory?我不是100%确定你想要的平均水平?但现在它是一个CTE,您可以将EventCounts & ClientToCaseCounts重新加入最终查询(递归)。希望这点指向正确的方向,如果没有,请提供一些示例架构&数据示例&我会相应地调整我的答案。

+0

嗨HeavenCore,这是完美的。感谢您的关注,我认识到用新鲜的眼睛来看待它一定很难! 我已经设法让脚本完美地工作! – TJH 2012-02-21 14:58:12