Sql 找到特定值时将十进制转换为int

Sql 找到特定值时将十进制转换为int,sql,Sql,我有一个查询,它使用CTE比较了几周之间的数据。它存储的内容之一是百分比数据。我正在尝试转换或强制转换任何等于100.00的值 例如,下面是结果的样子 Name Percentage Other App1 99.56 5.5 App2 100.00 6 我希望从100中去掉零。我尝试过一些案例陈述,但从未得到我想要的结果。这是我现在拥有的 SELECT f.Application, f.Percentage,

我有一个查询,它使用CTE比较了几周之间的数据。它存储的内容之一是百分比数据。我正在尝试转换或强制转换任何等于100.00的值

例如,下面是结果的样子

Name     Percentage     Other
App1     99.56          5.5
App2     100.00         6
我希望从100中去掉零。我尝试过一些案例陈述,但从未得到我想要的结果。这是我现在拥有的

SELECT
    f.Application,
    f.Percentage,
    f.Other,
    CASE
        WHEN f.Percentage = 100.00
        THEN 100
    END AS Percentage
FROM Table1 f
当前,100.00的值更改为100。但是,不等于100.00的所有内容都被置零。我可以通过添加

ELSE f.Percentage
但是100.00没有改变


如有任何帮助,我们将不胜感激。

正如我在评论中提到的,您不能有一个包含多种数据类型的SQL列

也就是说,它在您的情况下是否有用还有待观察,但是像
nvarchar
这样的字符串类型可以处理这两种类型,尽管您的代码需要能够将它们作为字符串而不是数字来处理

例如:

SELECT
    f.Application,
    f.Percentage,
    f.Other,
    CASE
        WHEN f.Percentage = 100.00
        THEN '100'
        ELSE CAST(f.Percentage as nvarchar(10))
    END AS Percentage
FROM Table1 f
Percentage
列现在将是
nvarchar
类型,但它将以这种方式返回值:

Name     Percentage     Other
App1     99.56          5.5
App2     100            6
App3     91.23          3.5
App4     94.41          4.8
App5     100            6

正如我在评论中提到的,您不能有一个包含多个数据类型的SQL列

也就是说,它在您的情况下是否有用还有待观察,但是像
nvarchar
这样的字符串类型可以处理这两种类型,尽管您的代码需要能够将它们作为字符串而不是数字来处理

例如:

SELECT
    f.Application,
    f.Percentage,
    f.Other,
    CASE
        WHEN f.Percentage = 100.00
        THEN '100'
        ELSE CAST(f.Percentage as nvarchar(10))
    END AS Percentage
FROM Table1 f
Percentage
列现在将是
nvarchar
类型,但它将以这种方式返回值:

Name     Percentage     Other
App1     99.56          5.5
App2     100            6
App3     91.23          3.5
App4     94.41          4.8
App5     100            6


SQL字段/列不能包含多种数据类型,这意味着您不能有一条记录具有
float/decimal
值,另一条记录具有
int
值。据我所知(尽管这个网站上有很多人比我在SQL中更容易理解),字符串类型(
nvarchar
)将能够处理十进制和整数值,当然,您的数据将以字符串值的形式返回。这个查询使用的是什么?为什么额外的
.00
很重要?这听起来像是您可以(应该)在显示代码中处理的事情。您将强制转换数据类型与格式化输出字符串相混淆。你需要晚一点。列必须始终具有相同的数据类型,一行不能有一个数据类型,下一行不能有不同的数据类型。您可以将其转换为文本并用
'
替换
.00
,也可以在报表中使用条件格式。SQL字段/列不能包含多个数据类型,这意味着您不能有一条记录具有
浮点/十进制
值,另一条记录具有
int
值。据我所知(尽管这个网站上有很多人比我在SQL中更容易理解),字符串类型(
nvarchar
)将能够处理十进制和整数值,当然,您的数据将以字符串值的形式返回。这个查询使用的是什么?为什么额外的
.00
很重要?这听起来像是您可以(应该)在显示代码中处理的事情。您将强制转换数据类型与格式化输出字符串相混淆。你需要晚一点。一列必须始终具有相同的数据类型,一行不能有一个数据类型,下一行不能有不同的数据类型。您可以将其转换为文本并用
'
替换
.00
,或者您可以在报表中使用条件格式。由于我创建了两个CTE,然后在最后合并,我是否只需要将这些更改添加到末尾或每个CTE?此外,这些都是在SQL Reporting Services中完成的,因此输入的数据很好。如果CTE结果以小数形式组合成单个结果集,则可以在返回最终结果集时使用此查询包装它们,而不是对每个CTE进行包装。实际上,我刚刚记住的最后一件事是。在我的报告中,我对这些值求和并求平均值。我想如果他们是瓦查尔,这会打破的。在进行计算之前,您必须将它们转换为
float
decimal
SUM(转换为float的百分比))
@maltman为什么您在查询中转换为字符串,而只是将它们转换回报告中要求和的数字。只需将所有内容保留为数字,并格式化报告中的数字,以删除任何尾随的零!由于我创建了两个CTE,然后在末尾合并,我是否只需要将这些更改添加到末尾或每个CTE?此外,这些都是在SQL Reporting Services中完成的,因此输入的数据很好。如果CTE结果以小数形式组合成单个结果集,则可以在返回最终结果集时使用此查询包装它们,而不是对每个CTE进行包装。实际上,我刚刚记住的最后一件事是。在我的报告中,我对这些值求和并求平均值。我想如果他们是瓦查尔,这会打破的。在进行计算之前,您必须将它们转换为
float
decimal
SUM(转换为float的百分比))
@maltman为什么您在查询中转换为字符串,而只是将它们转换回报告中要求和的数字。只需将所有内容保留为数字,并格式化报告中的数字,以删除任何尾随的零!