[英]Referencing a case statement from outside a Temp Table
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
To simplify what I've put, I've created a temporary table which lists out cases on a database. 为了简化说明,我创建了一个临时表,该表列出了数据库中的案例。 I've applied a case statement which then categorizes these cases into 3 types, either 1,2 or 3.
我应用了一个case语句,然后将这些案例分为3种类型,即1,2或3。
In the select statement below that I would like to have another column which shows the percentage of each of those categories from the total. 在下面的select语句中,我想另外显示一列,显示每个类别在总类别中所占的百分比。 My problem is that I can't use the alias "FPCategory" from the earlier case statement as it hasn't occurred yet for a valid column name to be used in the later statement.
我的问题是,我无法使用早期case语句中的别名“ FPCategory”,因为尚未在后面的语句中使用有效的列名。
Thanks! 谢谢!
First things first, let's do away with those nasty sub-queries & convert your query to a CTE (untested as i cant see your schema): 首先,让我们消除那些讨厌的子查询,并将您的查询转换为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]
Now, i noticed you where grouping on FPCategory in your last query wich would imply your results would have multiple casCaseID's per FPCategory? 现在,我注意到您在最后一次查询中对FPCategory进行分组的地方意味着您的结果将对每个FPCategory具有多个casCaseID? I'm not 100% sure on what you want to average?
我不确定要平均多少? but now it is a CTE you can rejoin EventCounts & ClientToCaseCounts onto the final query (recursion).
但现在它是CTE,您可以将EventCounts和ClientToCaseCounts重新加入到最终查询中(递归)。 Hope this points you in the right direction, if not, please provide some example schema & data examples & i'll tweak my answer accordingly.
希望这为您指明了正确的方向,如果没有,请提供一些示例架构和数据示例,我将相应地调整我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.