数据库中表的结构如下:
自增长序列 货架号 位置1 位置2 位置3 位置4 位置5 位置6 位置7 位置8 位置9 位置10 位置11 位置12
1 07 072110 072112 072105 072106 072103 072123 .....我想查询后变成 前两列可以不要,后面变成如下 位置 货号
位置1 072110
位置2 072112
位置3 072105
位置4 072106
位置5 072103
位置6 072123
. .
. .
. .
我们的数据库是SQL Server2000,
不知如何实现,难道要写11个Union ALL 语句?
2005里有个运算符好像2000不支持
自增长序列 货架号 位置1 位置2 位置3 位置4 位置5 位置6 位置7 位置8 位置9 位置10 位置11 位置12
1 07 072110 072112 072105 072106 072103 072123 .....我想查询后变成 前两列可以不要,后面变成如下 位置 货号
位置1 072110
位置2 072112
位置3 072105
位置4 072106
位置5 072103
位置6 072123
. .
. .
. .
我们的数据库是SQL Server2000,
不知如何实现,难道要写11个Union ALL 语句?
2005里有个运算符好像2000不支持
解决方案 »
- 如何比较两台服务器上的两个数据库的某个数据表的数据是否相同
- 弹出网址的解决办法
- 谁了解isnull函数,解释一下
- Sql语句实现查询父节点和所有子节点
- sql多张表建视图,如何提高效率
- Guid 还是 BigInt 苦恼
- 在数据表中一字段ID是设为自增的,如何在添加了一行后,得到ID的值啊!
- 触发器:当一个表插入一条数据后,同时向另外一个表中插入相应的数据(再次提问 复杂一些)
- 我有SQLServer2000标准版光盘.请问!
- 怎樣通過遠程通訊實現對方查看我的SQL SERVER上的數據?
- 在存储过程A中调用另一个存储过程B(返回值是一个table),怎么得到存储过程B的返回值
- 如何用sql查询器修改时间字段的默认时间
我们的数据库是SQL Server2000,
不知如何实现,难道要写11个Union ALL 语句? 没有更好的方法了,可以写成动态的sql语句,拼成一个sql字符串最后用exec()执行
drop table tb
go
create table tb(姓名 varchar(10) , 語文 int , 數學 int , 物理 int)
insert into tb values('張三',74,83,93)
insert into tb values('李四',74,84,94)
go
select * from (
select 姓名,課程='語文',分數=語文 from tb union all
select 姓名,課程='數學',分數=數學 from tb union all
select 姓名,課程='物理',分數=物理 from tb)as b order by 姓名
insert into tb values(1,'07','072110','072112','072105','072106','072103','072123','位置7的值','位置8的值','位置9的值','位置10的值','位置11的值','位置12的值')
go--SQL SERVER 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select [位置] = ' + quotename(Name , '''') + ' , [货号] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'自增长序列' and name! = N'货架号' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql)drop table tb/*
位置 货号
------ ----------
位置1 072110
位置2 072112
位置3 072105
位置4 072106
位置5 072103
位置6 072123
位置7 位置7的值
位置8 位置8的值
位置9 位置9的值
位置10 位置10的值
位置11 位置11的值
位置12 位置12的值
*/
if object_id('tb')is not null
drop table tb
go
create table tb(姓名 varchar(10) , 語文 int , 數學 int , 物理 int)
insert into tb values('張三',74,83,93)
insert into tb values('李四',74,84,94)
godeclare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')