求助: 一个关于字段名是变量的查询语句

wf2091139 2006-01-11 11:20:44
比方说我有2个数据表:
Select * from pkcset
select * from productcinfo

其中 pkcset 表结构及数据大致如下
ID FieldName
1 Field1
2 Field2
3 Field3

其中 productcinfo表结构及数据大致如下
vID Field1 Field2 Field3
1 aa bb cc

要求结果是对pkcset 进行查询,希望得到下面结果
ID FieldName valuess
1 Field1 aa
2 Field2 bb
3 Field3 cc


--于是我试用下面语句 (valuess 不是数据库 中的字段)
select *,( select a.FieldName from productcinfo ) valuess from pkcset a
结果是错的,

请问这条语句该怎么写?



...全文
158 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wf2091139 2006-01-11
  • 打赏
  • 举报
回复
to : happyflystone(仙林幽谷客)

非常感谢,问题解决了。

结帖
-狙击手- 2006-01-11
  • 打赏
  • 举报
回复
create table pkcset (ID int,FieldName varchar(10))
insert pkcset select 1,'Field1' union
select 2,'Field2' union
select 3,'Field3'
create table productcinfo (vID int,Field1 char(2),Field2 char(2),Field3 char(2))
insert productcinfo select 1,'aa','bb','cc'

declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ' when '''+ FieldName+ ''''+' then '+ convert(varchar(10),FieldName) from
(select distinct FieldName from pkcset) a
exec( 'select a.*,( select top 1 case a.FieldName'+ @sql + ' end from productcinfo ) valuess from pkcset a')

/*

ID FieldName valuess
----------- ---------- -------
1 Field1 aa
2 Field2 bb
3 Field3 cc


*/
-狙击手- 2006-01-11
  • 打赏
  • 举报
回复
那就动态SQL ,你等一下
wf2091139 2006-01-11
  • 打赏
  • 举报
回复
在实际工作中,他有多少字段以及有什么样的字段都是不清楚的,所以我觉的不应该
出现 'Field1'这样的常量。
wf2091139 2006-01-11
  • 打赏
  • 举报
回复
“case a.FieldName when 'Field1' then Field1 when 'Field2' then Field2 when 'Field3' then Field3”
这个方法不可以,因为 pkcset 的记录可能多啊,(同时productcinfo的字段也可能很长的)
samfeng_2003 2006-01-11
  • 打赏
  • 举报
回复
create table pkcset
(id int,fieldname varchar(20))

insert pkcset
select 1,'Field1' union all
select 2,'Field2' union all
select 3,'Field3'


create table productcinfo
(vid int,field1 varchar(20),field2 varchar(20),field3 varchar(20))

insert productcinfo
select 1,'aa','bb','cc'

select a.id,a.fieldname,b.field1 as valuess
from
pkcset a,
(
select'field1' as type,field1 from productcinfo
union all
select 'field2' as type,field2 from productcinfo
union all
select 'field3' as type,field3 from productcinfo
) b where a.fieldname=b.type

drop table pkcset
drop table productcinfo

id fieldname valuess
----------- -------------------- --------------------
1 Field1 aa
2 Field2 bb
3 Field3 cc

(所影响的行数为 3 行)
-狙击手- 2006-01-11
  • 打赏
  • 举报
回复
declare @pkcset table(ID int,FieldName varchar(10))
insert @pkcset select 1,'Field1' union
select 2,'Field2' union
select 3,'Field3'
declare @productcinfo table(vID int,Field1 char(2),Field2 char(2),Field3 char(2))
insert @productcinfo select 1,'aa','bb','cc'
select a.*,( select top 1 case a.FieldName when 'Field1'
then Field1 when 'Field2' then Field2 when 'Field3' then Field3 end from @productcinfo )
valuess from @pkcset a

/*

ID FieldName valuess
----------- ---------- -------
1 Field1 aa
2 Field2 bb
3 Field3 cc
*/
-狙击手- 2006-01-11
  • 打赏
  • 举报
回复
select a.*,( select top 1 case a.FieldName when 'Field1' then Field1 when 'Field2' then Field2 when 'Field3' then Field3 end from productcinfo ) valuess from pkcset a
qtyeee 2006-01-11
  • 打赏
  • 举报
回复
第一个

34,837

社区成员

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

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