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

请数据库,小弟我相相信你们能行.

2012-01-23 
请数据库高手进,我相相信你们能行.在线等……下面是SQL语句selectHeaderText,FiledName,(selectFiledNamefro

请数据库高手进,我相相信你们能行.在线等……
下面是SQL语句
select   HeaderText,FiledName,   (select   FiledName   from   DaQiJianCe   where   jiance_date   =N '2007-4-18 '   and   caiyang_id   =2)   as   FiledData,   DataType   from   Management   where   DataTable   =N 'DaQiJianCe '   and   ShowFiled   =   1

说明

表一 <DaQiJianCe>

caiyang_id   字段1   字段2   字段3   字段4   jiance_date
        2               10         20         30         40         2007-4-18

表二 <Management>
HeaderText   FiledName   DataType   ShowFiled
      语文               字段2           Int             true
      数学               字段3           Int             true

通过上面的SQL语句要得到的结果
HeaderText   FiledName   FiledData   DataType
      语文               字段2           20                 Int
      数学               字段3           30                 Int

但现结果(我也知道问题在哪儿,但解决不了)
HeaderText   FiledName   FiledData   DataType
      语文               字段2         字段2           Int
      数学               字段3         字段2           Int

请高手解决一下问题呀,好痛苦……


[解决办法]
这样试试

select HeaderText,FiledName,
case when FiledName= '字段1 ' then (select 字段1 from DaQiJianCe where jiance_date =N '2007-4-18 ' and caiyang_id =2)
when FiledName= '字段2 ' then (select 字段2 from DaQiJianCe where jiance_date =N '2007-4-18 ' and caiyang_id =2)
when FiledName= '字段3 ' then (select 字段3 from DaQiJianCe where jiance_date =N '2007-4-18 ' and caiyang_id =2)
when FiledName= '字段4 ' then (select 字段4 from DaQiJianCe where jiance_date =N '2007-4-18 ' and caiyang_id =2)
end as FiledData,
DataType
from Management
where DataTable =N 'DaQiJianCe ' and ShowFiled = 1
[解决办法]

create table DaQiJianCe(caiyang_id int,字段1 int, 字段2 int, 字段3 int, 字段4 int, jiance_date smalldatetime)
insert into DaQiJianCe select 2,10,20,30,40, '2007-4-18 '

create table Management(HeaderText varchar(10),FiledName varchar(10),DataType varchar(10),ShowFiled varchar(10))
insert into Management select '语文 ', '字段2 ', 'Int ', 'true '
union all select '数学 ', '字段3 ', 'Int ', 'true '

select ta.* from Management ta
left join
(
select * from DaQiJianCe
unpivot
(字段 for 字段值 in ([字段1],[字段2],[字段3],[字段4])
) as unpi
) tb
on ta.FiledName=tb.字段值

drop table DaQiJianCe,Management

/*
(1 行受影响)

(2 行受影响)
HeaderText FiledName DataType ShowFiled


---------- ---------- ---------- ----------
语文 字段2 Int true
数学 字段3 Int true

(2 行受影响)

*/
[解决办法]
select HeaderText,FiledName,DataType=tb.字段,DataType from Management ta
left join
(
select * from DaQiJianCe
unpivot
(字段 for 字段值 in ([字段1],[字段2],[字段3],[字段4])
) as unpi
) tb
on ta.FiledName=tb.字段值

/*
(1 行受影响)

(2 行受影响)
HeaderText FiledName DataType DataType
---------- ---------- ----------- ----------
语文 字段2 20 Int
数学 字段3 30 Int

(2 行受影响)
*/
[解决办法]
--如果楼住是sql 2000 的数据库.根据syscolumns 获取字段值. 动态SQL 就可以了.
[解决办法]
???
create table DaQiJianCe
(caiyang_id int, 字段1 varchar(20), 字段2 varchar(20), 字段3 varchar(20), 字段4 varchar(20), jiance_date datetime)
insert into DaQiJianCe select 2, 10, 20, 30, 40, '2007-4-18 '

create table Management
(HeaderText varchar(20), FiledName varchar(20), DataType varchar(20), ShowFiled varchar(20))
insert into Management select '语文 ', '字段2 ', 'Int ', 'true '
union all select '数学 ', '字段3 ', 'Int ', 'true '

declare @var varchar(1000)
set @var= ' '
select @var=@var+ ' when ' ' '+filedname+ ' ' ' then b. '+filedname from management group by filedname
exec( 'select HeaderText,FiledName,case FiledName '+@var+ ' end [FiledData],DataType from Management a,DaQiJianCe b ')


HeaderText FiledName FiledData DataType
-------------------- -------------------- -------------------- --------------------
语文 字段2 20 Int
数学 字段3 30 Int

[解决办法]
--在2005 下没有问题. 我测试过了. 2005 如果用动态sql 就用 sys.columns 表.获取字段信息
[解决办法]
zlp321002(付出最大努力,追求最高成就,享受最佳生活,收获无悔人) ( ) 信誉:104 Blog 加为好友 2007-04-17 09:48:38 得分: 0


--在2005 下没有问题. 我测试过了. 2005 如果用动态sql 就用 sys.columns 表.获取字段信息


2005下用syscolumns/sys.columns 都是可以的
[解决办法]
--2000 的用破破的方法. 2005 就用 我的方法. 都没有问题.

热点排行