直奔主题吧。 SQL 语句查询问题(关于列运算):有一张表 table1 字段以及数据举例如下:(字段类型都为 数字类型) a1 a2 a3 a4 a5 a6 a7 a8 (字段数量有时不固定)
-----------------------------------------------------
0 3 1 1 NULL NULL 3 NULL
NULL 1 NULL NULL NULL 2 NULL NULL
5 NULL NULL 5 NULL 0 NULL 1
NULL NULL NULL NULL NULL NULL NULL NULL ... 现在假如我进行列运算, 比方说我想把所有列相加, 得到一个新列 colsum
我想得到如下结果: colsum
----------------
8 3
11 0
-----------------
由于列数量很多,而且有时候列数量不固定,所以用 case when then ...很烦琐,也不灵活。各位大侠不吝赐教! 在线急等给分~ 谢谢.
-----------------------------------------------------
0 3 1 1 NULL NULL 3 NULL
NULL 1 NULL NULL NULL 2 NULL NULL
5 NULL NULL 5 NULL 0 NULL 1
NULL NULL NULL NULL NULL NULL NULL NULL ... 现在假如我进行列运算, 比方说我想把所有列相加, 得到一个新列 colsum
我想得到如下结果: colsum
----------------
8 3
11 0
-----------------
由于列数量很多,而且有时候列数量不固定,所以用 case when then ...很烦琐,也不灵活。各位大侠不吝赐教! 在线急等给分~ 谢谢.
sysobjects的id对应syscolumns的id 在sysobjects里遍历你的表名可以得到表的列总数.然后做循环一列一列加起来就OK
select id form sysobjects where name = "table1";
//依据上语句得到的id,从syscolumns中取出table表的列数count
select count(name) form syscloumns where id = id;for(i=0;i<count;i++)
{
//your codes ;
}
Create Table table1
(a1 Int,
a2 Int,
a3 Int,
a4 Int,
a5 Int,
a6 Int,
a7 Int,
a8 Int)
--插入數據
Insert table1 Select 0, 3, 1, 1, NULL,NULL,3, NULL
Union All Select NULL,1, NULL,NULL,NULL,2, NULL,NULL
Union All Select 5, NULL,NULL,5, NULL,0, NULL,1
Union All Select NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
GO
--建立存儲過程
Create ProceDure Getcolsum
As
Begin
Declare @S Varchar(8000)
Set @S=''
Select @S=@S+'+IsNull('+Name+',0)' From SysColumns Where ID=OBJECT_ID('table1') Order By ColID
Select @S='Select '+Stuff(@S,1,1,'') +' As colsum From table1'
EXEC(@S)
End
GO
--測試
EXEC Getcolsum
--刪除測試環境
Drop Table table1
Drop ProceDure Getcolsum
--結果
/*
colsum
8
3
11
0
*/