导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

请教! convert 能实现这样的转换吗?!

hmzgz81 2003-12-20 11:22:51
我是想如果我的表里面的数据是撤消状态则其金额表示为------ 即:

序号 金额 状态
1 100 销售
2 ---- 撤消
...全文
27 点赞 收藏 21
写回复
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmzgz81 2003-12-20
Query2Str :=' if object_id(''tempdb..#temp'') is not null DROP TABLE #temp '+
' select identity(int,1,1) as 序列, aa.*,cast(100*aa.销售金额/bb.合计销售金额 as varchar)+''%'' as 比例 '+
' into #temp from '+
' (SELECT d.ID, a.销售日期,(select 姓名 from 用户 d where a.制表= d.ID ) as 销售代表, '+
' (select b.订货单号 from 订货单 b where a.销售ID=b.销售ID) as 订货单号, a.销售单号, '+
' a.相关单据号 as 撤消单号, '+
' (case when 状态=''销售'' then cast(金额 as varchar) when 状态=''撤消'' then ''-----'' else null end) as 销售金额 '+
' FROM 销售单 a LEFT OUTER JOIN '+
' 用户 b ON a.制表 = b.ID LEFT OUTER JOIN '+
' 用户与组 c ON c.用户号 = b.ID LEFT OUTER JOIN '+
' 用户组 d ON d.ID = c.组号 '+
' where (a.状态=''销售'' or a.状态=''撤消'') and 销售日期 between '''+
DateTimetostr(DateTimePicker1.Date - 1) +''' and ''' + DateTimetostr(DateTimepicker2.Date)+ '''and d.ID= '''+
Datamodule2.ADOQuery1.FieldByName('ID').AsString+''') aa,'+
' (select sum(case 状态 when ''销售'' then 金额 else null end) as 合计销售金额 from 销售单'+
' where 销售日期 between '''+
DateTimetostr(DateTimePicker1.Date - 1) +''' and ''' + DateTimetostr(DateTimepicker2.Date)+ '''and 制表= '''+
Datamodule2.ADOQuery1.FieldByName('ID').AsString+''') bb'+
' select * from #temp ';

显示的网格为cxGrid
回复
wzh1215 2003-12-20
上面的在SQL中应该没有问题,你把delphi程序列出来看看!
回复
wzh1215 2003-12-20
(case when 状态='撤消' then '----' else cast(金额 as varchar) end)

(case 状态 when '撤消' then '----' else cast(金额 as varchar) end)
--没有区别
回复
hmzgz81 2003-12-20
怎么我 吧这句话放到delphi 里面就会报错啊 ?
回复
ycyin 2003-12-20
Try this:
select 序号,(case when 状态 ='撤消' then '----' else convert(char(20),金额) end)
as 金额,状态
from TABLE
[where condition]
回复
hmzgz81 2003-12-20
(case when 状态='撤消' then '----' else cast(金额 as varchar) end)

(case 状态 when '撤消' then '----' else cast(金额 as varchar) end)

有什么区别?
回复
txlicenhe 2003-12-20
(case when 状态 ='撤消' then '----' else cast(金额 as varchar) end)


cast(金额 as varchar) !!!!!
回复
hmzgz81 2003-12-20
楼上的兄弟! 不行啊! 报错

将 varchar 值 '70000.00' 转换为数据类型为 int 的列时发生语法错误。
警告: 聚合或其它 SET 操作消除了空值。
回复
wzh1215 2003-12-20
SELECT d.ID as 组ID, a.销售日期,(select 姓名 from 用户 d where a.制表= d.ID ) as 销售代表,
(select b.订货单号 from 订货单 b where a.销售ID=b.销售ID) as 订货单号, a.销售单号,
a.相关单据号 as 撤消单号,
(case 状态 when '撤消' then '----' else cast(金额 as varchar) end) as 销售金额
FROM 销售单 a LEFT OUTER JOIN
用户 b ON a.制表 = b.ID LEFT OUTER JOIN
用户与组 c ON c.用户号 = b.ID LEFT OUTER JOIN
用户组 d ON d.ID = c.组号
where (a.状态='销售' or a.状态='撤消')
回复
hmzgz81 2003-12-20
那应该怎么转啊 ?
回复
dlpseeyou 2003-12-20
可以的
回复
hmzgz81 2003-12-20
SELECT d.ID as 组ID, a.销售日期,(select 姓名 from 用户 d where a.制表= d.ID ) as 销售代表,
(select b.订货单号 from 订货单 b where a.销售ID=b.销售ID) as 订货单号, a.销售单号,
a.相关单据号 as 撤消单号,
(case 状态 when '撤消' then '----' else 金额 end) as 销售金额
FROM 销售单 a LEFT OUTER JOIN
用户 b ON a.制表 = b.ID LEFT OUTER JOIN
用户与组 c ON c.用户号 = b.ID LEFT OUTER JOIN
用户组 d ON d.ID = c.组号
where (a.状态='销售' or a.状态='撤消')
回复
hmzgz81 2003-12-20
我的 ‘金额’字段是money 类型的! 能转换成 varchar 型吗?
回复
victorycyz 2003-12-20
贴出你自己写的语句看看。
回复
dlpseeyou 2003-12-20
select 序号,(case when 状态 ='撤消' then '----'
else isnull(cast(金额 as varchar(12)),'0') end)
as 金额,状态
from 表名
回复
hmzgz81 2003-12-20
将cast(金额 as varchar) 换成 金额 又报错:
不允许从数据类型 varchar 到 money 的隐性转换。请使用 CONVERT 函数来运行此查询。
回复
hmzgz81 2003-12-20
报错:

将 varchar 值 '70000.00' 转换为数据类型为 int 的列时发生语法错误。
警告: 聚合或其它 SET 操作消除了空值。
回复
hmzgz81 2003-12-20
好像不行哦 ! 我再试试!
回复
dlpseeyou 2003-12-20
select 序号,(case when 状态 ='撤消' then '----'
else cast(金额 as varchar(6)) end)
as 金额,状态
from 表名
回复
txlicenhe 2003-12-20
select 序号,(case when 状态 ='撤消' then '----' else cast(金额 as varchar) end)
as 金额,状态
from 表
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告