为什么总是 有执行错误:对数据类型而言运算符无效。运算符为 subtract,类型为 varchar

wssicanfly 2008-12-18 10:42:26
use database
select Fdate '日期',Fcheck as '审核',Fclose as '关闭',FBillNo as '订单号',
SUM(CAST(FBaseQty AS INT)) as '汇总数量',MAX(FSenddate) AS '最迟交货日期',
SUM(CAST(FstockQty AS INT)) as '汇总入库数量',
SUM(Fallamount) as '汇总金额',FEmpIDName as '业务员'
from vwICBill_26
where '汇总入库数量'-'汇总数量'< 0
and fdate >'2008-09-01' GROUP BY FBillNo,Fdate,Fcheck,Fclose,FEmpIDName
ORDER BY '最迟交货日期' DESC

为什么总是提示 执行错误:对数据类型而言运算符无效。运算符为 subtract,类型为 varchar。呢??
FBaseQty FstockQty 原来的数据类型为decimal(10,2) 不用CAST转换仍有这样的错误
...全文
1396 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢分享!!!!
dawugui 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wssicanfly 的回复:]
引用 1 楼 chuifengde 的回复:
'汇总入库数量'-'汇总数量' 要换成
SUM(CAST(FstockQty AS INT))-SUM(CAST(FBaseQty AS INT))



我早试过了
但是会提示你
[Microsoft][ODBC SQL Server Driver][SQL Server]聚合不应
出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列
表所包含的子查询中,并且要对其进行聚合的列是外部引用。
[/Quote]

use database 
select Fdate '日期',Fcheck as '审核',Fclose as '关闭',FBillNo as '订单号',
SUM(CAST(FBaseQty AS INT)) as '汇总数量',MAX(FSenddate) AS '最迟交货日期',
SUM(CAST(FstockQty AS INT)) as '汇总入库数量',
SUM(Fallamount) as '汇总金额',FEmpIDName as '业务员'
from vwICBill_26
where fdate >'2008-09-01'
GROUP BY FBillNo,Fdate,Fcheck,Fclose,FEmpIDName
having (SUM(CAST(FstockQty AS INT)) - SUM(CAST(FBaseQty AS INT))) < 0
ORDER BY '最迟交货日期' DESC
wssicanfly 2008-12-18
  • 打赏
  • 举报
回复
而且很搞笑的是,如果where里用别名来查询,如

where '日期'>'2008-09-01'

执行的结果就会忽略这个条件,不进行筛选。

只有执行

where fdate>'2008-09-01'
才不会被忽略

我想这会不会和使用别名有关呢??
请各位高手帮我释疑,谢谢!
wssicanfly 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chuifengde 的回复:]
'汇总入库数量'-'汇总数量' 要换成
SUM(CAST(FstockQty AS INT))-SUM(CAST(FBaseQty AS INT))
[/Quote]


我早试过了
但是会提示你
[Microsoft][ODBC SQL Server Driver][SQL Server]聚合不应
出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列
表所包含的子查询中,并且要对其进行聚合的列是外部引用。
dawugui 2008-12-18
  • 打赏
  • 举报
回复
select * from
(
select Fdate '日期',
Fcheck as '审核',
Fclose as '关闭',
FBillNo as '订单号',
SUM(CAST(FBaseQty AS INT)) as '汇总数量',
MAX(FSenddate) AS '最迟交货日期',
SUM(CAST(FstockQty AS INT)) as '汇总入库数量',
SUM(Fallamount) as '汇总金额',
FEmpIDName as '业务员'
from vwICBill_26
where fdate >'2008-09-01'
GROUP BY FBillNo,Fdate,Fcheck,Fclose,FEmpIDName
) t where 汇总入库数量 - 汇总数量 < 0
ORDER BY '最迟交货日期' DESC
chuifengde 2008-12-18
  • 打赏
  • 举报
回复
'汇总入库数量'-'汇总数量' 要换成
SUM(CAST(FstockQty AS INT))-SUM(CAST(FBaseQty AS INT))
wssicanfly 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]
引用 3 楼 wssicanfly 的回复:
引用 1 楼 chuifengde 的回复:
'汇总入库数量'-'汇总数量' 要换成
SUM(CAST(FstockQty AS INT))-SUM(CAST(FBaseQty AS INT))



我早试过了
但是会提示你
[Microsoft][ODBC SQL Server Driver][SQL Server]聚合不应
出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列
表所包含的子查询中,并且要对其进行聚合的列是外部引用。



SQL codeuse database
select F…
[/Quote]

结贴!
还想请教
为什么会出现
where '日期'>'2008-09-01'
执行的结果会忽略这个条件,不进行筛选。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种类,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧