• 数据库实现动态表头



    适用行:主要适用于表头的不确定性 比如专家评分时 未评的专家不显示在表头中

    关键点:数据库的列转行


    下面开始实现:

    1:建表

    CREATE  TABLE Student
    (
        student_id int PRIMARY KEY IDENTITY(1,1),
        student_name varchar(20) NOT NULL    
    )
    
    CREATE TABLE Teacher
    (
        teacher_id int PRIMARY KEY IDENTITY(1,1),
        teacher_name varchar(20) NOT NULL
    )
    
    CREATE TABLE Marks
    (
        student_id int FOREIGN KEY REFERENCES Student(student_id) ON UPDATE CASCADE ON DELETE CASCADE,
        teacher_id int FOREIGN KEY REFERENCES Teacher(teacher_id) ON UPDATE CASCADE ON DELETE CASCADE,
        PRIMARY KEY(student_id,teacher_id),
        mark int NOT NULL
    )

    2:插入数据

    INSERT INTO Student VALUES('李鹏')
    INSERT INTO Student VALUES('张三')
    INSERT INTO Student VALUES('小四')
    
    INSERT INTO Teacher VALUES('李老师')
    INSERT INTO Teacher VALUES('王老师')
    INSERT INTO Teacher VALUES('邓老师')
    INSERT INTO Teacher VALUES('不该出现的老师')
    
    INSERT INTO Marks VALUES(1,1,10)
    INSERT INTO Marks VALUES(1,2,20)
    INSERT INTO Marks VALUES(1,3,30)
    INSERT INTO Marks VALUES(2,1,40)
    INSERT INTO Marks VALUES(2,2,50)
    INSERT INTO Marks VALUES(3,3,60)

    3:动态表查询语句

    DECLARE @sql varchar(2000)
    
    SET @sql = 'SELECT student_name AS [姓名]'
    
    SELECT @sql = @sql + ',MAX(CASE teacher_id WHEN ''' + cast(A.teacher_id as nvarchar(5)) + ''' THEN mark ELSE NULL END ) AS [ ' + teacher_name + ' 评分]'
    FROM (SELECT DISTINCT teacher_id FROM Marks ) as A INNER JOIN Teacher ON Teacher.teacher_id = A.teacher_id
    
    SET @sql = @sql + ' FROM Marks INNER JOIN Student ON  Marks.student_id = Student.student_id GROUP BY student_name'
    exec(@sql) 
    print @sql

    4:遇到的错误以及处理方法

    ①:一定要注意 该有空格的地方必须有空格,该有逗号的地方有逗号

    ②:下列错误是因为 A.teacher_id是  int 类型的如果没有转化为nvarchar类型

    image

  • 相关阅读:
    etcd
    mesos+marathon+zookeeper+docker
    安装好dashboard 登录出现错误
    最小化centos7离线安装docker环境
    centons7安装ftp
    TensorFlow运行模型demo时常见问题
    centos7全新系统安装TensorFlow
    vmware创建虚拟机并安装centos7系统
    python使用moviepy模块对视频进行操作
    iis7/8隐藏banner信息
  • 原文地址:https://www.cnblogs.com/lipeng0824/p/4373717.html
Copyright © 2020-2023  润新知