我有一组代码,通常是三位数,后跟最多2位数,例如012.34
或123.45
。前三个数字定义组的一般类别,小数点后面的数字定义更具体的质量。可能有77个012.xx
个数字,并且有数百个唯一的3位数组定义,每个条目的数字位数不同。
有谁知道如何编写快速查询来实现这一目标?
答案 0 :(得分:2)
假设它存储在varchar
列中,因为您要存储012.34
...
SELECT LEFT(someColumn,3), COUNT(*)
FROM someTable
GROUP BY LEFT(someColumn,3)
HAVING COUNT(*) > 5 -- per your comments
ORDER BY LEFT(someColumn,3)
如果不是,那么你会这样做:
SELECT LEFT(CONVERT(VARCHAR(10),someColumn),3), COUNT(*)
FROM someTable
GROUP BY LEFT(CONVERT(VARCHAR(10),someColumn),3)
ORDER BY LEFT(CONVERT(VARCHAR(10),someColumn),3)
答案 1 :(得分:0)
取决于您的结果集是数字还是字符。如果不是数字,你可以使用字符串操作。
select left(resultSet,charindex('.',resultset)) , count(*)
from x
group by by left(resultSet,charindex('.',resultset))
order by left(resultSet,charindex('.',resultset))
使用charindex,您将获得正确的剪切'当第一个数字不是3时,通常是'。
如果你的结果集是数字/浮点数你可以使用地板函数
select floor(resultset),count(*)
from x
group by floor(resultset)
order by floor(resultset)
答案 2 :(得分:0)
@rypress看起来与Other respiratory tuberculosis
ClickMe的ICD-9诊断代码非常相似。它是否正确?在这种情况下,您将在结果中获得类别和子类别,并可能会更改您的计数(012->012.0->012.00,012.02..)
示例数据:
IF OBJECT_ID(N'TempICD') > 0
BEGIN
DROP TABLE TempICD
END
CREATE TABLE TempICD (ICD VARCHAR(10))
INSERT INTO TempICD
VALUES ('012'),('012.0'),('012.00'),('012.01'),('012.02'),
('012.03'),('012.04'),('012.05'),('012.05'),
('013'),('013.0'),('013.00'),('013.01'),('013.02'),
('013.03'),(NULL)
查询以获取包含6个或更多订单项的类别(包括类别和子类别):
SELECT LEFT(ICD, 3) AS ICDs,
COUNT(1) AS ICDCount
FROM TempICD
GROUP BY LEFT(ICD, 3)
HAVING COUNT(*) > 5
ORDER BY LEFT(ICD, 3)
查询以获取包含6个或更多订单项的类别(不包括类别和子类别):
SELECT SUBSTRING(ICD, 1, CHARINDEX('.', ICD + '.') - 1) AS ICDs,
SUM(CASE
WHEN LEN(SUBSTRING(ICD, CHARINDEX('.', ICD) + 1, LEN(ICD))) = 2 THEN 1
ELSE 0
END) AS ICDCount
FROM TempICD
WHERE ICD IS NOT NULL
GROUP BY SUBSTRING(ICD, 1, CHARINDEX('.', ICD + '.') - 1)
HAVING SUM(CASE
WHEN LEN(SUBSTRING(ICD, CHARINDEX('.', ICD) + 1, LEN(ICD))) = 2 THEN 1
ELSE 0
END) > 5
清理脚本:
IF OBJECT_ID(N'TempICD') > 0
BEGIN
DROP TABLE TempICD
END
答案 3 :(得分:0)
这也可以帮到你。 我假设该列是十进制数据类型。
SELECT CAST([COLUMN] AS INT) [GROUP],
COUNT(*) [COUNT]
FROM [TABLE] T
GROUP BY CAST([COLUMN] AS INT)