日期:2014-05-18  浏览次数:20431 次

请高手帮忙写一个查询语句
有这样两个表:
表A名   :   Sales  
字段   :年月日,   金额1,金额2,金额3,金额4,金额5,金额6,金额7,金额8,金额9。

表B名   :   金额类别
字段:   金额ID,金额类别名称

表B中的数据:
-------------------------------------------------
金额ID,金额类别名称
1                   AAAAA
2                   BBBBB
3                   CCCCC
4                   DDDDD
5                   EEEEE
6                   FFFFF
7                   GGGGG
8                   HHHHH
9                   IIIII

现在要进行这样的查询:
表A中有9个字段,这9个字段对应在表B中的编号是1~9
如果表B中有金额ID为1的记录,则以AAAAA作为表A的金额1的显示用的名字,值还是用表A的金额1的值,就是要下面这样的效果:

年月日,   AAAAA,BBBBB,CCCCC,DDDDD,EEEEE,FFFFF,GGGGG,   HHHHH,   IIIII
20070101   15.00     20.00   10.00   10.00   20.00   12.00   12.00     20.00     30.00

其中的AAAAA~IIIII都是要根据表B中的内容判断是否显示的。

希望各位大侠出手帮忙,多谢了!!


------解决方案--------------------
declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+a.name+ '] as [ '+b.金额类别名称+ '] ' from syscolumns a,金额类别 b where a.colid=b.金额ID+1 and a.id=object_id( 'Sales ')

set @sql= 'select 年月日 '+@sql+ ' from Sales '

exec(@sql)
------解决方案--------------------
用colid判断有点危险

------解决方案--------------------
create table Sales(年月日 varchar(10),金额1 int,金额2 int,金额3 int,金额4 int,金额5 int,金额6 int,金额7 int,金额8 int,金额9 int)

create table 金额类别(金额ID int,金额类别名称 varchar(10))

insert into 金额类别 select 1, 'AAAAA '
insert into 金额类别 select 2, 'BBBBB '
insert into 金额类别 select 3, 'CCCCC '
insert into 金额类别 select 4, 'DDDDD '
insert into 金额类别 select 5, 'EEEEE '
insert into 金额类别 select 6, 'FFFFF '
insert into 金额类别 select 7, 'GGGGG '
insert into 金额类别 select 8, 'HHHHH '
insert into 金额类别 select 9, 'IIIII '
go

declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+a.name+ '] as [ '+b.金额类别名称+ '] ' from syscolumns a,金额类别 b where a.colid=b.金额ID+1 and a.id=object_id( 'Sales ')

set @sql= 'select 年月日 '+@sql+ ' from Sales '

exec(@sql)
go

/*
年月日 AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH IIIII
---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
*/

drop table sales,金额类别
go
------解决方案--------------------
declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+a.name+ '] as [ '+b.金额类别名称+ '] ' from syscolumns a,金额类别 b where a.name= '金额 '+cast(b.金额ID as varchar) and a.id=object_id( 'Sales ')

set @sql= 'select 年月日 '+@sql+ ' from Sales '

exec(@sql)

------解决方案--------------------