为什么总是 有执行错误:对数据类型而言运算符无效。运算符为 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转换仍有这样的错误
...全文
1262 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'
执行的结果会忽略这个条件,不进行筛选。

27,579

社区成员

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

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