微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 varchar 转换为数据类型数字 CASE 语句的算术溢出错误

如何解决将 varchar 转换为数据类型数字 CASE 语句的算术溢出错误

我正在尝试编写一个返回“估计年值”的查询,为此,我使用了 Case 语句。查询中涉及两个内部联接。

所以,当我运行这个作品时,查询和给我结果:

select Users.Id,Name,PhoneNumber,Email,Currency,count(*) as TotalOrders,sum(TotalCustomerAmount) as TotalOrderValue,avg(TotalCustomerAmount) as AverageOrderValue,TsCreate as RegistrationDate,max(TsOrderPlaced) as LastOrderDate,min(TsOrderPlaced) as FirstOrderDate,CASE 
    When PromotionsEnabled = 0 then 'Y'
    When PromotionsEnabled = 1 then 'n'
    else 'undefined'
end as Promotions,/*CASE
    When ((DATEDIFF(day,max(TsOrderPlaced),min(TsOrderPlaced)) >= 6) AND (count(*) > 3)) then  ((sum(TotalCustomerAmount)/(DATEDIFF(day,min(TsOrderPlaced))))*365) 
    Else '-'
end as EstimatedAnnualValue*/
from AspNetUsers with (nolock)
    inner join Orders with (nolock) on Orders.UserId = AspNetUsers.Id and Orders.WhiteLabelConfigId = @WhiteLabelConfigId
                                    and Orders.OrderState in (2,3,4,12)     
    inner join UserWhiteLabelConfigs with (nolock) on UserWhiteLabelConfigs.UserId = AspNetUsers.Id and Orders.WhiteLabelConfigId = @WhiteLabelConfigId
where AspNetUsers.discriminator = 'ApplicationUser'
group by Users.Id,Number,TsCreate,PromotionsEnabled

但是当我用第二个 CSAE 语句运行这个时问题就来了,是不是因为我不能在 GROUP BY 之前使用聚合函数?我也在考虑使用子查询 寻求帮助!

解决方法

您需要使用聚合函数。例如,如果您只在所有值都为 'Y'0 时才想要 NULL

(case when max(PromotionsEnabled) = 0 then 'Y'
      when max(PromotionsEnabled) = 1 then 'N'
      else 'undefined'
 end) as Promotions,

我不确定这是否是您想要的逻辑(因为该细节不在问题中)。但是,这表明您可以在 case 表达式 中使用聚合函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。