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

我现在有一张表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 

红糖糍粑
浏览 142回答 2
2回答

慕哥9229398

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  

倚天杖

你不加在group by里面,那你加上聚合函数吧,比如max(xxxxxxxx)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server