遇到一数据难题.高手请进!(100分)

  • 主题发起人 主题发起人 assfmc
  • 开始时间 开始时间
A

assfmc

Unregistered / Unconfirmed
GUEST, unregistred user!
如有一个数据表:<br>&nbsp;张三 一班<br>李四 二班<br>田五 一班<br>小明 一班<br>小花 三班<br>小张 二班<br>小李 二班<br>小黄 三班<br>翠花 一班<br>桂花 一班<br>菊花 三班<br>桃花 一班<br>小王 一班<br>现在想将其在另一个表实现如下排序:<br>张三 一班 李四 二班 小花 三班<br>田五 一班 小张 二班 小黄 三班<br>小明 一班 小李 二班 <br>翠花 一班 菊花 二班 <br>桂花 一班 <br>桃花 一班 <br>小王 一班 <br>请问有什么方法可以实现?
 
表达不明,不知道楼主在说什么
 
交叉表问题,搜搜就知道答案
 
如果是数据库的话可以用存储过程+游标+临时表+动态创建字段,来实现。<br>也可以用TStringGird,逐个纪录写入来实现。应该是没有一个Select语句能实现这个功能。因为你的列数都不固定。
 
用CASE语句就能解决。。。。
 
可能我表达不是很清楚.以上问题是我在实际应用中碰到的.<br>客户在数据录入时是没有排序的.就是按照表一那样.但客户要求列印时又要按表二排序.<br>这问题我用Select没办法实现.所以想请教一下.看有没人能帮一下我.
 
用Case语句,基本的行列转换。
 
用Case不行吧?现在是只有“一班”、“二班”、“三班”,如果用户在冒出个“四班”“五班”,那不就傻眼了?如果要打印的话,用存储过程来实现是是最实际的方法了。
 
用游标吧
 
我提一个思路,看看是否可行:<br>1、客户在录入时你要根据它的“一班”、“二班”、“三班”...设一ID,就用你的例子来说,完成后应该类似下面的样子:<br>张三 &nbsp;一班 1<br>李四 &nbsp;二班 2<br>田五 &nbsp;一班 1<br>小明 &nbsp;一班 1<br>小花 &nbsp;三班 3<br>小张 &nbsp;二班 2<br>小李 &nbsp;二班 2<br>小黄 &nbsp;三班 3<br>翠花 &nbsp;一班 1<br>桂花 &nbsp;一班 1<br>菊花 &nbsp;三班 3<br>桃花 &nbsp;一班 1<br>小王 &nbsp;一班 1<br>2、保存时除了原有的数据,再新建一临时表,列数为3*2(即临时表的列数应该为:Max(ID)*2),并把ID为1的数据(含姓名、班级)存入第1、2列,ID为2的数据存入第3、4列...,这个规律应该不难找的,类似于下面的方法:<br>for i := 1 to Max(ID) do<br>&nbsp; strSQL := 'Insert Into tmp (col' + IntToStr(2 * i - 1) + ', col' + IntToStr(2 * i) + ') Select xm, bj From a Where ID = ' + IntToStr(i);<br>3、把临时表的数据显示给用户看<br>关键的步骤有2个:一是创建临时表,此表的字段数应为Select Max(ID) From a 的2倍,为方便插入数据,建议字段名命名为类似于col1、col2、col3...coli这样的;<br>二是插入数据,方法如上,当然这些步骤也可以用存储过程来完成,这样效率更高,实现的思路应该差不多。
 
列不固定 &nbsp;无法处理!
 
你是想显示呢还是打印呢?
 
如果LZ只是要打印的时候打印出这样的效果的话,就做一个小程序好了,用FastReport就可以轻松实现
 
已找到解决的办法.谢谢各位热心帮助!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部