当前位置: 代码迷 >> Sql Server >> 急求:提取所有 数据类型为 int或double型的列,求和显示出来解决方案
  详细解决方案

急求:提取所有 数据类型为 int或double型的列,求和显示出来解决方案

热度:37   发布时间:2016-04-27 13:25:44.0
急求:提取所有 数据类型为 int或double型的列,求和显示出来
2005版本:

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

求和 求平均数

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

显示的最终结果如下:

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

新人 分少 谢谢了

------解决方案--------------------
看起来像是作业题,不过现在的作业题好高级
SQL code
USE TEMPDBGOIF OBJECT_ID('TB') IS NOT NULL DROP TABLE TBGOCREATE TABLE TB(COL1 INT,COL2 FLOAT,COL3 VARCHAR(10))INSERT INTO TBSELECT 1,2.2,'A' UNION ALLSELECT 2,3.3,'B'GODECLARE @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 COLINNER JOIN SYS.TYPES TYPES ON COL.SYSTEM_TYPE_ID=TYPES.SYSTEM_TYPE_IDWHERE OBJECT_NAME(OBJECT_ID)='TB' AND  TYPES.NAME IN ('tinyint','SMALLINT','INT','BIGINT','REAL','MONEY','NUMERIC','FLOAT','DECIMAL')EXEC (@SQL)/*列名    总和    平均数COL1    3    1COL2    5.5    2.75*/
------解决方案--------------------
SQL code
create table chu(id char(3),sname char(5),sno int,sage int)insert into chuselect '001','lx',5,17 union allselect '002','su',6,18 union allselect '003','wg',8,20 union allselect '004','hj',9,21select * from chuid   sname sno         sage---- ----- ----------- -----------001  lx    5           17002  su    6           18003  wg    8           20004  hj    9           21declare @sql varchar(6000)=''select @[email protected]+' union all select '''+b.name+''' ''列名'',sum('+b.name+') ''总和'',avg('+b.name+') ''平均数'' from chu' from sys.objects ainner join sys.columns bon a.object_id=b.object_idinner join sys.types con b.system_type_id=c.system_type_idwhere a.[type]='U' and a.name='chu'and c.name in ('int','decimal')select @sql=stuff(@sql,1,11,'')exec(@sql)列名    总和        平均数---- ----------- -----------sno    28          7sage   76          19(2 row(s) affected)
  相关解决方案