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)