有dw d_ztxm 从表ztxm 含有 材料clbh 质检项目zjxm 质检标准 zjbz
aa o2 >20
bb o2 >10
aa c3 <3
cc c3 >5
现在要转换成 d_zjbz 材料clbh o2 c3
aa >20 <3
bb >10
cc <5
使用sql 语句直接构成d_zjbz
DECLARE @sql varchar(8000)
SET @sql = ''
SELECT @sql = @sql+',
max(case when zjxm = '''+zjxm+''' then zjbz END) as '''+zjxm+''''
FROM zjxm
GROUP BY zjxm
SELECT @sql = 'select [email protected]+' from zjxm group by clbh'
EXEC(@sql)
可以正常显示,但是出现问题
当我在d_zjxm 中增加新的项目是不会实时更新到d_zjbz 中,那位老大帮帮忙?
------解决方案--------------------
建个存储过程,
- SQL code
create proc P_tmpasDECLARE @sql varchar(8000) SET @sql = '' SELECT @sql = @sql+', max(case when zjxm = '''+zjxm+''' then zjbz END) as '''+zjxm+'''' FROM zjxm GROUP BY zjxm SELECT @sql = 'select [email protected]+' from zjxm group by clbh' EXEC(@sql)
------解决方案--------------------
楼主,非得要用这个数据窗口来保存数据吗?
如果用这个数据窗口保存数据,建议在数据窗口的updatestart自己生成sql语句进行更新
最好的方法是再建一个数据窗口dw_source,然后把修改内容移至dw_source,然后再保存dw_source
------解决方案--------------------
//根据行状态,来构造sql语句,lz先试试吧
dwItemStatus l_status
string ls_clbh,ls_zjxm,ls_zjbz,ls_error
long i
for i=1 to dw_1.rowcount()
ls_clbh=dw_1.getitemstring(i,'clbh')
ls_zjxm=dw_1.getitemstring(i,'zjxm')
ls_zjbz=dw_1.getitemstring(i,'zjbz')
l_status = dw_1.GetItemStatus(i,0, Primary!)
choose case l_status
case New!,NewModified!
insert into ztxm (clbh,zjxm,zjbz) values(:ls_clbh,:ls_zjxm,:ls_zjbz);
case DataModified!
update ztxm set zjbz =,:ls_zjbz where clbh=:ls_clbh and zjxm=:ls_zjxm;
case else
end choose
if sqlca.sqlcode=0 then
commit;
else
ls_error=sqlca.sqlerrtext
rollback;
messagebox('系统提示','第'+string(i)+'行提交错误:'+ls_error)
next