解决方案 »

  1.   

    你参考下
    DECLARE @SQL VARCHAR(8000)
    SET @SQL='SELECT 姓名,年龄'
    SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' END,0)['+科目+']'FROM 课程表
    SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
    EXEC(@SQL)
      

  2.   

    DECLARE @SQL VARCHAR(8000)
    SET @SQL='SELECT 姓名,年龄'
    SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' THEN 成绩 END,0)['+科目+']'FROM 课程表
    SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
    EXEC(@SQL)更正下~
      

  3.   

    DECLARE @SQL VARCHAR(8000)
    SET @SQL='SELECT 姓名,年龄'
    SELECT @SQL=@SQL+',ISNULL(MAX(CASE 科目 WHEN '''+科目+''' THEN 成绩 END),0)['+科目+']'FROM 课程表
    SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
    EXEC(@SQL)丢三落四~~
    用餐去了
      

  4.   

    如果不用这种形式,简单的sql查询语句能实现吗?
      

  5.   

    这个是动态处理,如果不这样的话,只能参照你的课程表,把课程各列写死了SELECT 姓名,年龄
    ,ISNULL(MAX(CASE 科目 WHEN '数学' THEN 成绩 END),0)[数学]
    ,ISNULL(MAX(CASE 科目 WHEN '英语' THEN 成绩 END),0)[英语]
    ,ISNULL(MAX(CASE 科目 WHEN '物理' THEN 成绩 END),0)[物理]
    ,ISNULL(MAX(CASE 科目 WHEN '化学' THEN 成绩 END),0)[化学]
    ,ISNULL(MAX(CASE 科目 WHEN '地理' THEN 成绩 END),0)[地理]
    ,ISNULL(MAX(CASE 科目 WHEN '语文' THEN 成绩 END),0)[语文]
    FROM
    学生基本表
    GROUP BY 姓名,年龄
    --以下是SQL2005+的额外方式
    SELECT 姓名,年龄,数学,英语,物理,化学,地理,语文
    FROM 学生基本表
    PIVOT(MAX(成绩)FOR 科目 IN([数学],[英语],[物理],[化学],[地理],[语文]))P