Sql 如何按族代码按查询分组
我应该编写一个查询来计算列的和,其中的原因码类似于一个数字。我有这张桌子 表十: ------------------------ | ReasoneCode | Duration | |------------------------| | 201 | 27512 | | 202 | 4372 | | 100 | 10322 | | 301.12 | 1 | | 302.06 | 34 | | 305 | 12 | ------------------------ 你能帮我吗Sql 如何按族代码按查询分组,sql,sql-server,group-by,Sql,Sql Server,Group By,我应该编写一个查询来计算列的和,其中的原因码类似于一个数字。我有这张桌子 表十: ------------------------ | ReasoneCode | Duration | |------------------------| | 201 | 27512 | | 202 | 4372 | | 100 | 10322 | | 301.12 | 1 | | 302.06 | 34
我尝试使用这个解决方案。 通过此查询,我将从第一列中删除所有“.”
SELECT CAST(LEFT(replace(ReasonCode, '.', ''), (CHARINDEX('.', replace(ReasonCode, '.', ''), 1) + 4)) AS DECIMAL(14, 0)) as Data, SUM(Duration)
FROM TableX
GROUP BY CAST(LEFT(replace(ReasonCode, '.', ''), (CHARINDEX('.', replace(ReasonCode, '.', ''), 1) + 4)) AS DECIMAL(14, 0))
现在,我尝试为来自reasoneCode家族的groupby结果编写另一个查询。
此查询的结果是:
------------------------
| ReasoneCode | Duration |
|------------------------|
| 201 | 27512 |
| 202 | 4372 |
| 100 | 10322 |
| 30112 | 1 |
| 30206 | 34 |
| 305 | 12 |
------------------------
我可以把这个结果放到临时表中,然后从这个临时表中进行选择
SELECT
CAST(CAST(ReasonCode as decimal(8,2)) as int) / 100 * 100 as roundedCode,
SUM(Duration)
FROM @TemporaryTable
GROUP BY CAST(CAST(ReasonCode as decimal(8,2)) as int) / 100 * 100
现在的结果是:
------------------------
| ReasoneCode | Duration |
|------------------------|
| 200 | 31884 |
| 100 | 10322 |
| 3000 | 35 |
| 305 | 12 |
------------------------
只有一个错误,它不是按300和3000进行分组。假设您想按100的倍数进行分组,并且两列都是数字列,那么就可以这样做
SELECT cast(ReasonCode as int) / 100 * 100 as roundedCode, SUM(Duration)
FROM TableX
GROUP BY roundedCode
选择舍入(舍入(原因代码)/100)*100作为舍入代码,求和(持续时间)
来自表X按取整代码分组尝试以下操作:
SELECT
CAST(CAST(ReasonCode as decimal(15,5)) as int) / 100 * 100 as roundedCode,
SUM(Duration)
FROM TableX
GROUP BY roundedCode
试试这个
如果ReasonCode是数字数据类型
SELECT (ReasonCode-(ReasonCode%100)), SUM(Duration)
FROM #Table
GROUP BY (ReasonCode-(ReasonCode%100))
如果ReasonCode是NVARCHAR
SELECT (CONVERT(NUMERIC(22,6),ReasonCode)-(CONVERT(NUMERIC(22,6),ReasonCode)%100)), SUM(Duration)
FROM #Table
GROUP BY (CONVERT(NUMERIC(22,6),ReasonCode)-(CONVERT(NUMERIC(22,6),ReasonCode)%100))
发布30篇文章后,请学会正确设置问题的格式。你所说的像数字一样的
是什么意思?哪种类型的ReasoneCode
?ReasoneCode列是一个NVARCHAR列,但包含的值为30130201.12301.13…我问题的第一部分呢?谢谢,但有一列的值为302.12或303.06,然后找不到您的查询,然后像我在更新的回答谢谢,但有一列的值为302.12或303.06,则查询结果不正确。我假设Reasoncode列是一个整数。我对答案进行了编辑,使之适用于十进制。请尝试updatedquery。
SELECT (ReasonCode-(ReasonCode%100)), SUM(Duration)
FROM #Table
GROUP BY (ReasonCode-(ReasonCode%100))
SELECT (CONVERT(NUMERIC(22,6),ReasonCode)-(CONVERT(NUMERIC(22,6),ReasonCode)%100)), SUM(Duration)
FROM #Table
GROUP BY (CONVERT(NUMERIC(22,6),ReasonCode)-(CONVERT(NUMERIC(22,6),ReasonCode)%100))