用SQL语句求表的转换(50分)

  • 主题发起人 主题发起人 wazhqi
  • 开始时间 开始时间
W

wazhqi

Unregistered / Unconfirmed
GUEST, unregistred user!
A表
  ID 材料名 规格
  1  AA
  2 BB
3 CC
.....
.....
B表
 材料名 批号 数量
 AA   1   100
AA 2 200
AA 10 400
 BB   2   200
 CC   3   400
 CC   4   100
 CC 5 200
上述两表转换成下表
 材料名 规格  批号 数量
 AA       1   100
      2 200
       10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
 
出报表简单
出数据集时对数据集修改一下就行了
 
select a.材料名,a.规格,b.批号,b.数量
from a,b
where a.材料名 = b.材料名
 
将数据选择出比较简单,在做报表时建议选用FR或RM,可以很方便的实现你要的格式
select a.材料名,a.规格,b.批号,b.数量
from a,b
where a.材料名 = b.材料名
group by a.材料名
 
to windbell
sql语句简单,但是要求转换成下表的形式该怎么办
 
什么意思?看了半天都没明白...你想实现什么?是不是后台存在这两个表?然后想在前台合成一个表显示出来?
如果我理解的没错,我建议你用ADOQuery 控件或者ADODataSet 控件。
在ADOQueyr控件的SQL 属性里面把 Windbell的程序考进去就行了
在ADODataSet 空间的CommandText 里面把Windbell的程序考进去也没问题...
 
to yulinsoft
是在前台合成一个表显示出来,但是通常是这样的呀
材料名 规格  批号 数量
 AA       1   100
AA     2 200
AA      10 400
 BB       2   200
 CC       3   400
 CC       4   100
 CC      5 200
怎样成为下表的形式
材料名 规格  批号 数量
 AA       1   100
      2 200
       10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
 
这个问题难!难在DBGrid很弱智,实在不行你自己写个控件不就完了!
如果觉得麻烦可以用ActiveX控件里面的F1Book,它采用的是Excel表示法,你只要把你需要的地方合并单元格就完了。
 
如果是用存储过程去写的话,到是能出来这种效果的,建个临时表,往里插数据。
 
Select iif(tmp=1,材料名,""),iif(tmp=1,规格,""),批号,数量
From (Select AAA.材料名,
AAA.规格,
BBB.批号,
BBB.数量,
(Select count(材料名) From b
where 材料名=BBB.材料名 and 批号<=BBB.批号) as tmp
From A AAA,B BBB
Where AAA.材料名=BBB.材料名
Order by AAA.材料名,批号) CCC
我在ACCESS中实验的,在SQL2000中把IIF改成Case when then
else
end语句即可。
不过这种语句在数据量大的时候效率不高,建议写个存储过程。
 
在access中没有存储过程,而楼上的速度太慢,有没有好的方法
 
材料名 规格  批号 数量
 AA       1   100
      2 200
       10 400
 BB       2   200
 CC       3   400
         4   100
        5 200
是打印的效果吧?
 
这个问题问的刁钻!!!!
 
to fanronghua
不但打印效果,而且是显示效果
 
写存储过程,,,
 
我以前是这样做的,先用一个字符型全局变量,在DataField的OnGetValue事件盘点Value是不是相同,如果是,那么OnGetValue里面的value='',并且把新的DataField值附给这个全局变量
 
to nathanlee
请帖一段代码
 
打印的話用報表分組就可以了,如果你要顯示的話就要加個字段排序,相同的材料名第一條標識為1,表示顯示材料名,第二條是2以後就表示不顯示材料名了.如果是我的話我會采用這種方法.
 
clientdataset好像有个分组的功能,相同的可以不显示。
 
选形成表,然后再将表写入一张临时表
材料名 规格  批号 数量
 AA       1   100
 AA     2 200
 AA      10 400
 BB       2   200
 CC       3   400
 CC        4   100
 CC       5 200
写成这样不难吧>>>
再做个临时表就行了
 
后退
顶部