这样得报表能打印吗,求思路(200分)

  • 主题发起人 主题发起人 taolaomeng
  • 开始时间 开始时间
T

taolaomeng

Unregistered / Unconfirmed
GUEST, unregistred user!
表的字段
部位名称 尺码 半成品大小 成品大小
注:尺码一般有M,L,2L,3L.....
现在需要打印的报表格式是
-------------------------------------------------------
部位名称| 尺码1 | 尺码2 | 尺码... |
| 成品大小|半成品大小| 成品大小|半成品大小| 成品大小|半成品大小|
——————————————————————————————————————-
我用的是FastReport,请问Sql语句怎么写,报表怎么实现。
请高手指点。
 
高手进来呀
 
有没有人做过相关的东西,指点一下么
 
高手来呀,分不够再加
 
你如果部位名称和尺码加起来是唯一的,那么SQL语句可以如下:
select 部位名称
,case 尺码 when 'M' then
半成品大小 else
null end as 尺码1半成品大小
,case 尺码 when 'M' then
成品大小 else
null end as 尺码1成品大小
,case 尺码 when 'L' then
半成品大小 else
null end as 尺码2半成品大小
,case 尺码 when 'L' then
成品大小 else
null end as 尺码2成品大小
......
from table1
至于fastreport,跟你平常的数据绑定是一样的
你的问题实际上就是SQL里面的行列转换,晚上应该有很多的例子,主要是case的用法而已。
 
首先感谢xyz500,你说的方法已经试了,但还是不行。
eg:
表中的数据
部位名称 尺码 半成品大小 成品大小
前腰 M 20.5 20
前腰 L 21.5 20.5
后腰 M 21.5 21
后腰 L 22 21
根据你的方法查询的结果
部位名称 尺码M半成品大小 尺码M成品大小 尺码L半成品大小 尺码L成品大小
前腰 20.5 20
前腰 21.5 20.5
后腰 21.5 21
后腰 22 21
而我想得到的结果:
部位名称 尺码M半成品大小 尺码M成品大小 尺码L半成品大小 尺码L成品大小
前腰 20.5 20 21.5 20.5
后腰 21.5 21 22 21
注:部位名称、尺码 的数量和名称是不定的。
例如:有的部位名称还有身侧带子等。尺码还有B70等。
 
请问用fastreport能不能实现,有没有人做过类似的东东?
Sql语句怎么写呀?
 
若你的类型固定的话好办, 使用内存表做个过渡即可, 为什么你不做个转变呢?
当SQL的语句真的不能一次得到结果, 要么使用存储过程, 要么使用内存表,
若是使用内存表是十分灵活的, 你想怎么做到行.
 
select [部位名称],
[尺码M半成品大小]=sum(case when [尺码]='M' then
[半成品大小] else
0 end),
[尺码M成品大小]=sum(case when [尺码]='M' then
[成品大小] else
0 end),
[尺码L半成品大小]=sum(case when [尺码]='L' then
[半成品大小] else
0 end),
[尺码L成品大小]=sum(case when [尺码]='L' then
[成品大小] else
0 end)
from @tb
group by [部位名称]
 
终于在Sql下试通了,代码如下:
declare @sql nvarchar(2000)
set @sql='select BuWei_Name'
select @sql=@sql+',max(case when ChiMa='''+ChiMa+''' then
BanChengPin_DaXiao else
NULL end) ['+ChiMa+'半成品]'
+',max(case when ChiMa='''+ChiMa+''' then
ChengPin_DaXiao else
NULL end) ['+ChiMa+'成品]'
from (select distinct ChiMa from GYDZiShengChanZhuYi where ZhuID=15 ) as t
exec (@sql+' from GYDZiShengChanZhuYi where ZhuID=15 group by BuWei_Name')
现在的问题有两个:
1:这样的语句怎么嵌到Delphi中?
2:与FastReport怎么连接?
 
是用DELPHI实现的吗?如果是的话我可以告诉你一个好方法.比你这更复杂的我都做过...
你是不是这样的.
数据集里是竖着显示的..
你要横着打印是?
 
to delphizhou :
是这样的,有什么好的方法?
 
同意kaida的
select [部位名称],
[尺码M半成品大小]=sum(case when [尺码]='M' then
[半成品大小] else
0 end),
[尺码M成品大小]=sum(case when [尺码]='M' then
[成品大小] else
0 end),
[尺码L半成品大小]=sum(case when [尺码]='L' then
[半成品大小] else
0 end),
[尺码L成品大小]=sum(case when [尺码]='L' then
[成品大小] else
0 end)
from @tb
group by [部位名称]
你用的max和kaida的sum,如果部位名称和尺码加起来是唯一的,效果就是一样的。
注:部位名称、尺码 的数量和名称是不定的。
你就在 from @tb 前面加上类似于[尺码L半成品大小]=sum(case when [尺码]='L' then
[半成品大小] else
0 end),
[尺码L成品大小]=sum(case when [尺码]='L' then
[成品大小] else
0 end)的就行了
1:这样的语句怎么嵌到Delphi中?
方案1:你可以在数据库中建立存储过程,然后delphi调用
方案2:先把你的那些sql语句赋值给一个字符串s,直接用adoconnection.execute(s)执行
2:与FastReport怎么连接?
你只要用过fastreport做过数据绑定的报表,就应该会啊。分别绑定尺码M半成品大小 尺码M成品大小 尺码L半成品大小 尺码L成品大小等field就行啊
 
问题终于解决了,谢谢各位的帮忙了
 
后退
顶部