SQL题目

    xiaoxiao2021-03-25  102

    有张学生成绩表a如下   Name  Subject   Value   张三  语文    80   张三  数学    90   张三  英语    85   李四  语文    85   李四  数学    92   李四  英语    82      查询出表   Name  语文  数学  英语   张三  80   90   85

      李四  85   92   82

    看SQL一个晚上,以为自己能写出来,结果还是网上找到了答案。答案是对,但不知道这样写好不好。

    select name  , max(case SUBJECT when '数学' then VALUE else 0 end) [数学] ,  max(case subject when '英语' then VALUE else 0 end) [英语] ,  max(case subject when '语文' then VALUE else 0 end) [语文] from a group by name

    找到答案,利用动态查询如下:

    declare @sql varchar(8000) SET @sql='select name' select @sql = @sql + ',max(case Subject when '''+Subject+''' then value end) ['+Subject+']' from (select distinct Subject from dbo.a)AS a select @sql = @sql+' from a group by name' exec(@sql)

    可以加上print @sql 查看内容

    declare @sql varchar(8000) set @sql = 'select name ' select @sql = @sql + ' , max(case subject when ''' + subject + ''' then value else 0 end) [' + subject + ']' from (select distinct subject from a) as a  SELECT @sql = @sql + ' , cast(avg(value*1.0) as decimal(18,2)) 平均分 , sum(value) 总分 from a group by name' PRINT @sql exec(@sql)

    cast(avg(value*1.0) as decimal(18,2)) 

    CAST (expression AS data_type)

    decimal(3,2)

    decimal:

    3—整数部分加小数部分长度为 3 1—小数部分长度为 1 参数说明:

    expression:任何有效的SQServer表达式。

    AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。

    data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

    平均分和总分也算出来

    转载请注明原文地址: https://ju.6miu.com/read-17776.html

    最新回复(0)