首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请高手帮忙写一个查询语句,该如何解决

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

请高手帮忙写一个查询语句
有这样两个表:
表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)

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


你是用的sqlserver 還是oraclE?
[解决办法]
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ',[金額 '+convert(char(01),金額ID)+ '] as [ '+金額類別名稱+ '] ' from B order by 金額ID

set @sql= 'select [年月日] '+@sql+ ' from A '

exec(@sql)
[解决办法]
create table Sales(年月日 datetime, 金额1 decimal(15,2),金额2 decimal(15,2),金额3 decimal(15,2)
,金额4 decimal(15,2),金额5 decimal(15,2),金额6 decimal(15,2),金额7 decimal(15,2),金额8 decimal(15,2),金额9 decimal(15,2))

create table 金额类别(金额ID int,金额类别名称 varchar(20))
insert 金额类别 select 1, 'AAAAA '
union all select 2, 'BBBBB '
union all select 3, 'CCCCC '
union all select 4, 'DDDDD '
union all select 5, 'EEEEE '
union all select 6, 'FFFFF '
union all select 7, 'GGGGG '
union all select 8, 'HHHHH '
union all select 9, 'IIIII '
declare @sql varchar(1000)
select @sql=isnull(@sql, ' ')+ ',[金额 '+rtrim(金额ID)+ ']= ' ' '+金额类别名称+ ' ' ' '
from 金额类别
exec( 'select 年月日 '+@sql+ ' from Sales ')
[解决办法]
create table Sales(年月日 datetime, 金额1 decimal(15,2),金额2 decimal(15,2),金额3 decimal(15,2)
,金额4 decimal(15,2),金额5 decimal(15,2),金额6 decimal(15,2),金额7 decimal(15,2),金额8 decimal(15,2),金额9 decimal(15,2))
insert Sales
select '20070101 ', 15.00, 20.00, 10.00, 10.00, 20.00, 12.00, 12.00, 20.00, 30.00
create table 金额类别(金额ID int,金额类别名称 varchar(20))
insert 金额类别 select 1, 'AAAAA '
union all select 2, 'BBBBB '
union all select 3, 'CCCCC '
union all select 4, 'DDDDD '
union all select 5, 'EEEEE '
union all select 6, 'FFFFF '
union all select 7, 'GGGGG '
union all select 8, 'HHHHH '
union all select 9, 'IIIII '

declare @sql varchar(1000)
select @sql=isnull(@sql, ' ')+ ',[金额 '+rtrim(金额ID)+ ']as ' ' '+金额类别名称+ ' ' ' '--把=改为as
from 金额类别
exec( 'select 年月日 '+@sql+ ' from Sales ')
年月日 AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH IIIII
----------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
2007-01-01 00:00:00.000 15.00 20.00 10.00 10.00 20.00 12.00 12.00 20.00 30.00

(1 行受影响)


[解决办法]
自己寫個function 就可以
------解决方案--------------------


create table A(年月日 varchar(10), 金额1 decimal(10, 2), 金额2 decimal(10, 2),金额3 decimal(10, 2),
金额4 decimal(10, 2),金额5 decimal(10, 2),金额6 decimal(10, 2),
金额7 decimal(10, 2),金额8 decimal(10, 2),金额9 decimal(10, 2))
insert A select '20070101 ', 15.00, 20.00, 10.00, 10.00, 20.00, 12.00, 12.00, 20.00, 30.00
go
create table B(金额ID int, 金额类别名称 varchar(10))
insert B select 1, 'AAAAA '
union all select 2, 'BBBBB '
union all select 3, 'CCCCC '
union all select 4, 'DDDDD '
union all select 5, 'EEEEE '
union all select 6, 'FFFFF '
--union all select 7, 'GGGGG '
union all select 8, 'HHHHH '
union all select 9, 'IIIII '
go

declare @sql varchar(8000)
set @sql= 'select 年月日 '
select @sql=@sql+ ', '+quotename(金额类别名称)+ '=金额 '+rtrim(金额ID)
from B
set @sql=@sql+ ' from A '
exec(@sql)

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

热点排行