在MSSQL中选择和分组编号范围
如何在MSSQL中实现这一点我需要一个不同数字范围的组 您可以使用CTE执行此操作:在MSSQL中选择和分组编号范围,sql,sql-server,Sql,Sql Server,如何在MSSQL中实现这一点我需要一个不同数字范围的组 您可以使用CTE执行此操作: SELECT CASE WHEN Vote BETWEEN 1 and 6 THEN '1-8' WHEN Vote BETWEEN 7 and 8 THEN '7-8' WHEN Vote BETWEEN 9 and 10 THEN '9-10' END AS Vote_range, COUNT(*) AS count F
SELECT
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8'
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END AS Vote_range,
COUNT(*) AS count
FROM CaseRatingVote
GROUP BY Vote_range
GO
在
选择
和分组依据
中使用完全相同的表达式
with a as (
SELECT
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8' --You may want to change this line!
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END AS Vote_range
FROM CaseRatingVote
)
select Vote_Range, count(*) as Row_Count
from a
group by Vote_Range
或者,也可以先计算分组列(不分组),然后在外部范围中按该列分组。这种方法更适合于维护
SELECT
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8'
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END AS Vote_range,
COUNT(*) AS count
FROM
CaseRatingVote
GROUP BY
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8'
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END
将查询包装在派生表中,
groupby
其结果:
;WITH CTE AS
(
SELECT
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8'
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END AS Vote_range
FROM
CaseRatingVote
)
SELECT
Vote_range,
COUNT(1)
FROM
CTE AS C
GROUP BY
C.Vote_range
选择SUM(投票数<7时为1,否则为0结束)作为[1-6],
总和(如果投票数介于7和8之间,则1或0结束)为[7-8],
总和(如果投票结果在9和10之间,则为1,否则为0结束)为[9-10],
计数(*)作为计数
从个案投票
这对我来说是最简单的方法。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。
select Vote_range, count(*) from
(
SELECT
CASE
WHEN Vote BETWEEN 1 and 6 THEN '1-8'
WHEN Vote BETWEEN 7 and 8 THEN '7-8'
WHEN Vote BETWEEN 9 and 10 THEN '9-10'
END AS Vote_range
FROM CaseRatingVote
) dt
GROUP BY Vote_range
SELECT SUM(CASE WHEN Vote < 7 THEN 1 ELSE 0 END) AS [1-6],
SUM(CASE WHEN Vote BETWEEN 7 AND 8 THEN 1 ELSE 0 END) AS [7-8],
SUM(CASE WHEN Vote BETWEEN 9 AND 10 THEN 1 ELSE 0 END) AS [9-10],
COUNT(*) AS count
FROM CaseRatingVote