sql语句

disdis 2005-04-08 03:47:03
表1:

序号 字段名称
1 A
2 B
3 C

表2:

序号 A B C
1 1 10 100
2 2 20 200
3 3 30 300


结果:
表1、表2根据"序号"作联合查询,根据表1中的字段名称在表2中查找相应的列

序号 值
1 1
2 20
3 300
...全文
209 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
尚和空四 2005-04-09
  • 打赏
  • 举报
回复
结合ADO会更好点控制
chenqianlong 2005-04-09
  • 打赏
  • 举报
回复
回复人: xiaomeixiang(Little Sheep) ( ) 信誉:100 2005-04-09 09:07:00 得分: 0

測試結果
id tvalue
1 1
2 20
3 300
xiaomeixiang 2005-04-09
  • 打赏
  • 举报
回复
create table tb1(tid int,tname varchar(10))
create table tb2(tid int,A INT,B INT,C INT)

insert into tb1
select 1,'A'
UNION ALL SELECT 2,'B'
UNION ALL SELECT 3,'C'

insert into tb2
select 1,1,10,100
UNION ALL SELECT 2,2,20,200
UNION ALL SELECT 3,3,30,300

declare @str nvarchar(4000)
select @str=''
select @str=@str+' union all select tid,'''+a.name + ''' as tname,'+a.name + ' as tvalue from tb2' from syscolumns a,sysobjects b where a.id=b.id and b.xtype='U' and b.name='tb2' and a.name<>'tid' order by a.colid

select @str=stuff(@str,1,11,'')
select @str = 'select a.tid,b.tvalue from tb1 a,('+ @str + ') b where a.tid=b.tid and a.tname=b.tname'
exec(@str)

drop table tb1,tb2
U2U2U2U2 2005-04-08
  • 打赏
  • 举报
回复
可是使用游标,
或者干脆使用行列转换,把表2 列转成行,就可以了
in_sky 2005-04-08
  • 打赏
  • 举报
回复
那就做个 循环比较, 在程序里实现~~~
disdis 2005-04-08
  • 打赏
  • 举报
回复
是啊,我这只是表里的一部分,要是case when就得好长,

不过还是十分谢谢二位!
paoluo 2005-04-08
  • 打赏
  • 举报
回复
但是这样的语句有点问题,就是不够灵活,写的太死了。
paoluo 2005-04-08
  • 打赏
  • 举报
回复

--建立测试环境
Create table 表1
(序号 Int,
字段名称 Varchar(10)
)

Create table 表2
(序号 Int,
A Int,
B Int,
C INt
)
GO
--插入数据
Insert 表1 Values(1, 'A')
Insert 表1 Values(2, 'B')
Insert 表1 Values(3, 'C')

Insert 表2 Values(1, 1, 10, 100)
Insert 表2 Values(2, 2, 20, 200)
Insert 表2 Values(3, 3, 30, 300)
GO
--测试
select A.序号,
(Case 字段名称
When 'A' Then A
When 'B' Then B
When 'C' Then C
End ) As 值
from 表1 A Inner Join 表2 B On A.序号=B.序号

--删除测试环境
Drop table 表1,表2
--结果
/*
序号 值
1 1
2 20
3 300
*/
paoluo 2005-04-08
  • 打赏
  • 举报
回复
一句语句可以搞定。

talantlee 2005-04-08
  • 打赏
  • 举报
回复
select 表2.*,表1.字段名称 as 字段名称 into #temp from 表2,表1 where 表2.系號=表1.系號

select 序號,a=case 字段名称 when 'a ' then a
when 'b' then b
when 'c' then c
end
from #temp
drop table #temp
disdis 2005-04-08
  • 打赏
  • 举报
回复
奇怪,真的没有人会吗?
disdis 2005-04-08
  • 打赏
  • 举报
回复
up

34,587

社区成员

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

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