日期:2014-05-18  浏览次数:20388 次

急求:提取所有 数据类型为 int或double型的列,求和显示出来
2005版本:

不知道他们的列名,在表中检索所有数据类型为 数值型 的列

求和 求平均数

并在 c#的界面上 显示出来 要求显示 列名 总和 平均数

显示的最终结果如下:

列名 总和 平均数
sno 28 7
sage 76 19

新人 分少 谢谢了

------解决方案--------------------
看起来像是作业题,不过现在的作业题好高级
SQL code
USE TEMPDB
GO
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
COL1 INT
,COL2 FLOAT
,COL3 VARCHAR(10)
)
INSERT INTO TB
SELECT 1,2.2,'A' UNION ALL
SELECT 2,3.3,'B'
GO
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL=ISNULL(@SQL+'
 UNION ALL ','')+'SELECT '''+COL.NAME+''' AS [列名],SUM('+COL.NAME+') AS [总和],AVG('+COL.NAME+') AS [平均数] FROM TB '
FROM SYS.COLUMNS COL
INNER JOIN SYS.TYPES TYPES ON COL.SYSTEM_TYPE_ID=TYPES.SYSTEM_TYPE_ID
WHERE OBJECT_NAME(OBJECT_ID)='TB' AND  TYPES.NAME IN ('tinyint','SMALLINT','INT','BIGINT','REAL','MONEY','NUMERIC','FLOAT','DECIMAL')
EXEC (@SQL)
/*
列名    总和    平均数
COL1    3    1
COL2    5.5    2.75
*/

------解决方案--------------------
SQL code

create table chu(id char(3),sname char(5),sno int,sage int)

insert into chu
select '001','lx',5,17 union all
select '002','su',6,18 union all
select '003','wg',8,20 union all
select '004','hj',9,21

select * from chu

id   sname sno         sage
---- ----- ----------- -----------
001  lx    5           17
002  su    6           18
003  wg    8           20
004  hj    9           21


declare @sql varchar(6000)=''

select @sql=@sql
+' union all select '''+b.name+''' ''列名'',sum('+b.name+') ''总和'',avg('+b.name+') ''平均数'' from chu' 
from sys.objects a
inner join sys.columns b
on a.object_id=b.object_id
inner join sys.types c
on b.system_type_id=c.system_type_id
where a.[type]='U' and a.name='chu'
and c.name in ('int','decimal')

select @sql=stuff(@sql,1,11,'')

exec(@sql)


列名    总和        平均数
---- ----------- -----------
sno    28          7
sage   76          19

(2 row(s) affected)