假设我在WHILE循环中创建T-SQL SELECT语句(比如说迭代年份记录)。我在SELECT中有记录的总数,以及与特定条件匹配的记录的子集计数。每个循环迭代都作为新记录添加到临时表中。使用COUNT *计算同一SELECT语句中的百分比
我可以使用COUNT(*)的总和分类汇总计算在同一个百分比选择?这将要求SELECT中的评估顺序是确定性的 - 即首先出现的是首先被排除。例如:
WHILE @yr < @CurrYr BEGIN
INSERT INTO @tmpMatches(total_ct, match_ct, pct_match, yr
-- some other fields
)
SELECT COUNT(*) AS total_ct,
SUM(IIF(cd.is_matched = 1, 1, 0)) AS match_ct,
(CASE
WHEN (total_ct > 0)
THEN (((@tmp_match_ct * 1.0)/
(@tmp_total_ct * 1.0)) * 100)
ELSE 0
END
) AS pct_match,
@yr
FROM candidate cd
INNER JOIN -- ...
WHERE -- ...
AND YEAR(closing_dt) = @yr
SET @yr = @yr + 1;
-- ...
END -- while
如果我不能依赖评价顺序,在我看来,我得有这个前面类似的SELECT语句,以获得整体的总集和运行前上面显示的声明。
在任何情况下,是否有更清晰,更像SQL的方式来获得此结果?
我不太懂代码,以便尽我所能提供的一般建议的[SQL服务器解析函数处理百分比]一个(https://technet.microsoft.com/en-us /library/hh213234%28v=sql.110%29.aspx)*可能*是你需要的。 – 2015-02-05 19:35:15