Sql 如何按族代码按查询分组

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

我应该编写一个查询来计算列的和,其中的原因码类似于一个数字。我有这张桌子

表十:

------------------------ | ReasoneCode | Duration | |------------------------| | 201 | 27512 | | 202 | 4372 | | 100 | 10322 | | 301.12 | 1 | | 302.06 | 34 | | 305 | 12 | ------------------------ 你能帮我吗


我尝试使用这个解决方案。 通过此查询,我将从第一列中删除所有“.”

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))