Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MSSQL中选择和分组编号范围_Sql_Sql Server - Fatal编程技术网

在MSSQL中选择和分组编号范围

在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

如何在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
    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