sql数据库中建立一个视图怎样把一张表的列值转换成另一张表的行值

a表中三列:ID 数量 仪器

第1个回答  2011-08-05
建个函数把
CREATE FUNCTION GetYQStringFromID(@AID nvarchar(100))
RETURNS nvarchar(1024)
AS
BEGIN
declare @Str varchar(1024)
set @str=''
select distinct @Str=@Str + 仪器 +'*'+cast(数量 as nvarchar(5))+' '
from a表
where ID=@AID
return @Str
END

然后查询
select ID,GetYQStringFromID(ID)as 仪器
from (select distinct ID from a表)a

效果为
ID 仪器
120 A*2 C*1 D*2;
330 B*3
112 A*2

虽然只有两列,但显示的效果类似追问

但是,我要求显示在不同的列中的,有办法吗?

追答

办法当然有,如果仅用SQL,列数可能只能固定了,例如
CREATE FUNCTION GetYQFromIndex(@AID nvarchar(100),@index int)
RETURNS nvarchar(1024)
AS
BEGIN
declare @Str varchar(1024)
select *,IDENTITY(int,1,1) as indexid into #t
from (select * from a表 where ID=@AID)a
select @Str=仪器 from #t where indexid=@index
drop table #t
return @Str
END
然后查询
select ID,GetYQFromIndex(ID,1)as 仪器1
,GetYQFromIndex(ID,2)as 仪器2
,GetYQFromIndex(ID,3)as 仪器3
...
from (select distinct ID from a表)a
写得好累,要给分哦^_^

追问

不能用哦,提示“无法从函数内访问临时表”
以下是错误提示;
消息 2772,级别 16,状态 1,过程 GetYQFromIndex,第 10 行
无法从函数内访问临时表。
消息 156,级别 15,状态 1,过程 GetYQFromIndex,第 13 行
关键字 'select' 附近有语法错误。
消息 195,级别 15,状态 10,过程 GetYQFromIndex,第 13 行
'GetYQFromIndex' 不是可以识别的 内置函数名称。

追答

改写
CREATE FUNCTION GetYQFromIndex(@AID nvarchar(100),@index int)
RETURNS nvarchar(1024)
AS
BEGIN
declare @Str varchar(1024)
select @Str=仪器
from (select *,IDENTITY(int,1,1) as indexid
from (select * from a表 where ID=@AID)a) b
where indexid=@index
return @Str
END
然后查询
select ID,dbo.GetYQFromIndex(ID,1)as 仪器1
,dbo.GetYQFromIndex(ID,2)as 仪器2
,dbo.GetYQFromIndex(ID,3)as 仪器3
...
from (select distinct ID from a表)a

///////////////////////
既然提示“无法从函数内访问临时表”也可以不用函数
select ID
,(select b.仪器 from(select *,IDENTITY(int,1,1)as 排列序号 from a表 c where c.ID=a.ID)b where 排列序号=1)as 仪器1
,(select b.仪器 from(select *,IDENTITY(int,1,1)as 排列序号 from a表 c where c.ID=a.ID)b where 排列序号=2)as 仪器2
,(select b.仪器 from(select *,IDENTITY(int,1,1)as 排列序号 from a表 c where c.ID=a.ID)b where 排列序号=3)as 仪器3

...
from (select distinct ID from a表)a
///////////////////////
自己应该学会调试和改写,方法一看就能会,要问调试细节,我这里没有SQL服务器啊^_^

追问

提示“关键字 'IDENTITY' 附近有语法错误。”
还有请问大神,from (select distinct ID from a表)这句中为什么是“a表”而不是“a"
辛苦大神了,无论结果怎样我都会给你加分,如果方便请留个QQ,继续帮帮我,谢谢

追答

你开始写的“a表中三列:ID 数量 仪器”所以我就把“a表”当表名
有个问题我搞错了,IDENTITY(int,1,1)只支持 INTO,那么继续改写,晕了
改写
CREATE FUNCTION GetYQFromIndex(@AID nvarchar(100),@index int)
RETURNS nvarchar(1024)
AS
BEGIN
declare @Str varchar(1024)
select top 1 @Str=仪器
from(select top @index *
from (select * from a表 where ID=@AID)
order by ID,数量,仪器 ASC)a
order by ID,数量,仪器 DESC
return @Str
END
然后查询
select ID,dbo.GetYQFromIndex(ID,1)as 仪器1
,dbo.GetYQFromIndex(ID,2)as 仪器2
,dbo.GetYQFromIndex(ID,3)as 仪器3
...
from (select distinct ID from a表)a

本回答被提问者采纳
第2个回答  2019-10-23
获取视图名称树懒已经实现了,下面就是获取视图中所有列的名称了,其实也是用一句sql语句就可以实现了,有兴趣也来试试吧
declare
@objid
int,@objname
char(40)set
@objname
=
'[你的视图名称]'
相似回答