SQL基于同一WHERE子句选择多个计数

SQL基于同一WHERE子句选择多个计数,sql,select,Sql,Select,我的表格中有如下数据: Number Date 18-000 2018-01-05 18-001 2018-01-08 ....... Number Date 19-350 2019-01-22 19-351 2019-01-22 19-352 2019-01-22 ........ Number Date 20-649 2020-01-24 20-650 2020-01-27 因此,每个数字前面的2位数字表示年份。我希望能够计算所有行中有多少行是从18、19和20开始

我的表格中有如下数据:

Number  Date
18-000  2018-01-05  
18-001  2018-01-08
.......
Number  Date
19-350  2019-01-22
19-351  2019-01-22
19-352  2019-01-22
........
Number  Date
20-649  2020-01-24
20-650  2020-01-27
因此,每个数字前面的2位数字表示年份。我希望能够计算所有行中有多少行是从18、19和20开始的。我做了18年,它是:

SELECT COUNT(Number) totalSUM
FROM my_table
where Number like N'18-%'

但是我如何才能返回3行,每行包含一年的总和?

您只需取数字列的左2个字符,然后按该行分组:

SELECT LEFT(Number, 2) AS year,
       COUNT(Number) AS totalSUM
FROM my_table
GROUP BY LEFT(Number, 2)
示例数据的输出:

year    totalSUM
18      2
19      3
20      2

您只需将数字列的左2个字符按以下方式分组:

SELECT LEFT(Number, 2) AS year,
       COUNT(Number) AS totalSUM
FROM my_table
GROUP BY LEFT(Number, 2)
示例数据的输出:

year    totalSUM
18      2
19      3
20      2

如果仪表板左侧的数字长度可变,例如1-、10-、100-:

MySQL:

SELECT LEFT(number, LOCATE('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, LOCATE('-', number) - 1)
SQL Server:

SELECT LEFT(number, CHARINDEX('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, CHARINDEX('-', number) - 1)

如果仪表板左侧的数字长度可变,例如1-、10-、100-:

MySQL:

SELECT LEFT(number, LOCATE('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, LOCATE('-', number) - 1)
SQL Server:

SELECT LEFT(number, CHARINDEX('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, CHARINDEX('-', number) - 1)

我删除了不兼容的数据库标记。我删除了不兼容的数据库标记。