SELECT
SUM(CASE WHEN [A科目分数] BETWEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_A]
,SUM(CASE WHEN [A科目分数] BETWEEN 80 AND 89 THEN 1 ELSE 0 END) AS [Up80_A]
,......
,SUM(CASE WHEN [B科目分数] BETWEEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_B]
,......
FROM [Test]
※ 引述《Litfal (Litfal)》之铭言:
: 数据库名称:SQL Server
: 数据库版本:均可
: 内容/问题描述:
: 有办法在一次Table scan中,就做掉多个条件字段的统计吗?
: 例如,我要统计某次考试中,每个分数区间的总人数,
: 如 60~69、70~79、80~89、90~100 区间的个别人数。
: 逻辑上来说应该扫一次、分别统计就够了。
: 但SQL语法我只能写成4次的table scan,像这样
: SELECT(
: SELECT COUNT(*)
: FROM [Test]
: WHERE [Test].[Score] >= 90 && [Test] <= 100) AS [Up90Count],
: SELECT COUNT(*)
: FROM [Test]
: WHERE [Test].[Score] >= 80 && [Test] < 90) AS [Up80Count],
: (略)
: 这样是跑4个table scan。
: 当然可以把Score加Index,但因为这边举的只是最简单的例子。
: 有时情况并不能把所有条件参数都Index。