请高手帮忙写一个查询语句

dahuzizyd 2007-02-02 01:44:28
有这样两个表:
表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中的内容判断是否显示的。

希望各位大侠出手帮忙,多谢了!!
...全文
364 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahuzizyd 2007-02-05
  • 打赏
  • 举报
回复
TO:楼上
不是用原列名,而是不包含该列。

谢谢大家,sql文我已经写出来了
ReViSion 2007-02-02
  • 打赏
  • 举报
回复
其中的AAAAA~IIIII都是要根据表B中的内容判断是否显示的。
-------------------------------------------------------
如果B表中不存在金额类别名称的话就用原列名
ReViSion 2007-02-02
  • 打赏
  • 举报
回复
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'
go

----直接用笨方法吧(建一个表变量)
declare @r table (id int)

insert into @r
select 1 union all select 2 union all
select 3 union all select 4 union all
select 5 union all select 6 union all
select 7 union all select 8 union all
select 9

declare @sqlstr varchar(8000)
select @sqlstr='select 年月日'

select @sqlstr=@sqlstr+',金额'+cast(a.id as varchar)+case isnull(b.金额类别名称,'') when '' then '' else ' as ['+b.金额类别名称+']
' end
from @r a
left join 金额类别 b on a.id=b.金额id

select @sqlstr=@sqlstr+'
from sales'

exec( @sqlstr)

----结果如下:(金额类别中不存在对9的定义所以用原来列名)




marco08 2007-02-02
  • 打赏
  • 举报
回复
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
cdyxh 2007-02-02
  • 打赏
  • 举报
回复
自己寫個function 就可以
w75251455 2007-02-02
  • 打赏
  • 举报
回复
把右边空白去掉吧....
w75251455 2007-02-02
  • 打赏
  • 举报
回复
syscolumns
mack
中国风 2007-02-02
  • 打赏
  • 举报
回复
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 行受影响)

dahuzizyd 2007-02-02
  • 打赏
  • 举报
回复
@cdyxh
Sqlserver
中国风 2007-02-02
  • 打赏
  • 举报
回复
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')
playwarcraft 2007-02-02
  • 打赏
  • 举报
回复
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)
cdyxh 2007-02-02
  • 打赏
  • 举报
回复
你是用的sqlserver 還是oraclE?
Hahahahahaha 2007-02-02
  • 打赏
  • 举报
回复
老大觉得怎么样?
Hahahahahaha 2007-02-02
  • 打赏
  • 举报
回复
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)
子陌红尘 2007-02-02
  • 打赏
  • 举报
回复
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
Hahahahahaha 2007-02-02
  • 打赏
  • 举报
回复
用colid判断有点危险
gc_ding 2007-02-02
  • 打赏
  • 举报
回复
100分的贴子总是可以看到子陌兄的身影...
子陌红尘 2007-02-02
  • 打赏
  • 举报
回复
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)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧