首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

针对不确定列做一个查询报表的做法.该怎么解决

2013-01-25 
针对不确定列做一个查询报表的做法..不知道我能不能表达清楚...情况如下..有这样两张表:tab1-------------

针对不确定列做一个查询报表的做法..
不知道我能不能表达清楚...

情况如下..

有这样两张表:
tab1
----------------
jldm  | jlmc
----------------
  1      交路A
  2      交路B
----------------

tab2
-------------------------
name   |  jldm   |   xtrq
张三       1         9.15
李四       2         9.15
张三       2         9.16
--------------------------
最后需要展示的结果是
-----------------------------------
姓名   |   交路A   |   交路B   
张三         1           1
李四         0           1
------------------------------------


不是求SQL语句..结果表里有2个不确定因素.
1.tab1中交路数不确定.交路数量是根据实际运行线路随时可能增加或者减少的.所以结果表中后面可能还有交路CDEFG......
2.tab2中的人走行的交路是不确定的.走一次算1趟...

我想过用一个类来加载交路数据..然后查询出tab2中所有人的走行数据加载进去..最后再展现出来..

但是由于交路数量的不确定性..所以我写类的定义的变量也就不可确定了(或者哪位教我下该如何定义类成员变量方便后面取值)...如果用类.似乎jldm和jlmc在最后展现的时候不太方便.除非一个成员关联2个变量(又短路了..)..

求比较好的解决方法....

[解决办法]
用SQL与C++代码结合的方式先把数据都生成出来,然后再想办法展示,不行就动态生成一个临时表,把结果都写到临时表中,然后再展示临时表
[解决办法]

--生成测试表和数据
create table tab1( jldm  int,jlmc varchar(10))

create table tab2( name   varchar(10), jldm  int,xtrq varchar(10))

truncate table  tab1
truncate table  tab2


insert into tab1(jldm,jlmc) values(1,'交路A')
insert into tab1(jldm,jlmc) values(2,'交路B')
insert into tab1(jldm,jlmc) values(3,'交路C')
insert into tab1(jldm,jlmc) values(4,'交路D')

insert into tab2(name,jldm,xtrq) values('张三',1,'9.15')
insert into tab2(name,jldm,xtrq) values('李四',2,'9.15')
insert into tab2(name,jldm,xtrq) values('张三',2,'9.15')

insert into tab2(name,jldm,xtrq) values('王五',1,'9.15')
insert into tab2(name,jldm,xtrq) values('王五',2,'9.15')
insert into tab2(name,jldm,xtrq) values('王五',3,'9.15')
insert into tab2(name,jldm,xtrq) values('王五',4,'9.15')

drop table #ls
select a.jldm,a.name,a.xtrq,b.jlmc into #ls from tab2 a,tab1 b where a.jldm=b.jldm
 
 
--关键sql语句
declare @s nvarchar(4000),@sql varchar(8000)
set @s='
set @s=''''
select @s=@s+'',[''+cast(rtrim([jlmc]) as varchar)+'']=sum(case [jlmc] when ''''''+cast([jlmc] as varchar)+'''''' then 1 else 0 end)''
from [#ls]
group by [jlmc]'
print @s


exec sp_executesql @s
,N'@s varchar(8000) out'
,@sql out
print @sql

exec('select name'+@sql+' from #ls 
group by [name]' )

热点排行