如何解决将 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 举报,一经查实,本站将立刻删除。