为了账号安全,请及时绑定邮箱和手机立即绑定

我不想把group by air_ticket.TOUR_CODE加上,有什么办法没有?

我不想把group by air_ticket.TOUR_CODE加上,有什么办法没有?

红糖糍粑 2023-04-08 22:18:24
我现在有一张表AIR_TICKET其中有个字段TOUR_CODE是nvarchar 类型,我现在想把当其中的存放的是数值时就和这个表中的TICKET_PRICE做乘法计算,否则就为0,我现在写了个sql 觉得没有问题,但是一执行就报“从数据类型 nvarchar 转换为 numeric 时出错。”这是为什么啊,请指教还有为什么非得加上group by air_ticket.TOUR_CODE不加就报 “选择列表中的列 'air_ticket.TOUR_CODE' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。” 下面是我写的sql 语句 select case when isnumeric(AIR_TICKET.TOUR_CODE)=1 then sum(AIR_TICKET.TICKET_PRICE*(convert(numeric,AIR_TICKET.TOUR_CODE))) else 0 end  as Z_VALUE_REWARD from air_ticket group by air_ticket.TOUR_CODE 
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

1.conver函数这么写看看:CONVERT(INT, AIR_TICKET.TOUR_CODE) 

2.如果在select 列表项中除了包含聚合函数外,还包含了表的某些列,那么你必须使用group by语句, 
你sql中使用了聚合函数,因为你isnumeric(AIR_TICKET.TOUR_CODE)含有AIR_TICKET.TOUR_CODE字段,所以需要加group by,否则报错。 

按照我的理解,你的sql应该是这样的: 

SELECT SUM(CASE  

                WHEN isnumeric(AIR_TICKET.TOUR_CODE) = 1 THEN  

                 AIR_TICKET.TICKET_PRICE * (CONVERT(INT, AIR_TICKET.TOUR_CODE))  

                ELSE  

                 0  

            END) AS Z_VALUE_REWARD  

  FROM air_ticket  


查看完整回答
反对 回复 2023-04-12
?
倚天杖

TA贡献1828条经验 获得超3个赞

你不加在group by里面,那你加上聚合函数吧,比如max(xxxxxxxx)

查看完整回答
反对 回复 2023-04-12
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信