sql高手进来 and datawindow高手进来

zch999 2003-12-05 12:48:28
有一个表:table1,字段: num(主键), seq (主键),year_tt(主键),amt

数据例如:
num seq year_tt amt
A 01 2002 1000.00
A 01 2003 2000.00
A 01 2004 3000.00
A 02 2000 100.00
A 02 2001 200.00
A 02 2002 300.00
A 03 2001 10000.00
A 03 2002 20000.00
B 01 2004 2000.00
… … … …
如果我现在只要 num = 'A' 的数据并且显示为如下:
rum seq 2000年 2001年 2002年 2003年 2004年
A 01 1000.00 2000.00 3000.00
A 02 100.00 200.00
A 03 10000.00 20000.00

请问这应当怎么实现啊?
...全文
65 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
workhand 2003-12-05
  • 打赏
  • 举报
回复
用存储过程见一个临时表,形成结果,用grid的dw显示即可,可以传入参数num= 'A',这样更灵活一些
henrysoft 2003-12-05
  • 打赏
  • 举报
回复
只要你干牺牲效率,其实也无所谓,你的where 子句落在主键上
可以用动态sql语句。
1,首先distinct 出各种年度
2,形成子查询
select a.num , a.seq
(select b.amt from table1 b
where b.num = a.num and b.seq = a.seq and b.year_tt = '动态值1' )as "动态值1"
...
from table1 a
where ...
然后动态形成数据窗口,保管可以
然后写代码,修饰你的表头等等
zch999 2003-12-05
  • 打赏
  • 举报
回复
to clockclock(闹钟) : 方法不错,可惜这次用不上,可是我又学到一招,谢谢!
zch999 2003-12-05
  • 打赏
  • 举报
回复
to eminena(俄罗斯方块) : 首先我已经说过只可以用free风格的 第二:题目的数据只是我的一个举例,这个年可能有10年,20年,也可能就是只有一个年度,难道我要做20,30个计算列(就像如果我要的资料是 num = 'A' seq = '01' 那么只有2002~2004 如果我要的资料是num = 'A' seq = '02' 那么年为 2000~2002)

to clockclock(闹钟) : 其实我上面我说的差不多, year_tt 是不定的,如果用户录了这年的数据那么我要显示它,如果没录我不用显示它。

clockclock 2003-12-05
  • 打赏
  • 举报
回复
可用一个SQL语句检索,下例是Sqlserver的语法,如用Oracle也有类似语法。
select num,seq,
sum(case when year_tt = '2000' then amt else 0 end) as Y2000,
sum(case when year_tt = '2001' then amt else 0 end) as Y2001,
sum(case when year_tt = '2002' then amt else 0 end) as Y2002,
sum(case when year_tt = '2003' then amt else 0 end) as Y2003,
sum(case when year_tt = '2004' then amt else 0 end) as Y2004
from table1
where num='A'
group by num,seq
njz168 2003-12-05
  • 打赏
  • 举报
回复
俄罗斯方块的可以考虑
eminena 2003-12-05
  • 打赏
  • 举报
回复
1、用Tabular型数据窗口
2、按 rum+seq 排序,按 rum 分组1,按 seq 分组2
3、隐藏细节栏
4、添加计算域 cp_amt0,cp_amt1,cp_amt2,cp_amt3,cp_amt4,在组2头带:
rum seq 2000年 2001年 2002年 2003年 2004年
在组2 带
A 01 cp_amt0, cp_amt1, cp_amt2, cp_amt3, cp_amt4

计算域的表达式:
cp_amt0: sum(if(year_tt='2000',amt,0 ) for group 2)
cp_amt1: sum(if(year_tt='2001',amt,0 ) for group 2)
cp_amt2: sum(if(year_tt='2002',amt,0 ) for group 2)
cp_amt3: sum(if(year_tt='2003',amt,0 ) for group 2)
cp_amt4: sum(if(year_tt='2004',amt,0 ) for group 2)
qianjia 2003-12-05
  • 打赏
  • 举报
回复
用存储过程吧,,我只能提个意见啦,因为我不是高手
andyyang007 2003-12-05
  • 打赏
  • 举报
回复
那就用臨時表。用存儲過程
wwwafa9 2003-12-05
  • 打赏
  • 举报
回复
你们公司的老板怎么搞得
只能用Free风格的数据窗口对象?
qianfl 2003-12-05
  • 打赏
  • 举报
回复
只能做临时表了
zch999 2003-12-05
  • 打赏
  • 举报
回复
忘了说一句,我们现在做这个datawindow只能用free风格的数据。
拜托各位了。
klbt 2003-12-05
  • 打赏
  • 举报
回复
用交叉表比较接近你的要求
51ling 2003-12-05
  • 打赏
  • 举报
回复
pb里有个交叉表,可以实现你的要求。
‘crossTab’类的datawindow,行:num,列year_tt,

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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