zoukankan      html  css  js  c++  java
  • 数据库实现动态表头


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

    关键点:数据库的列转行


    下面开始实现:

    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

  • 相关阅读:
    docker常用软件安装及使用
    生成base64位图片验证码
    项目经理的特殊需求,对象的移动,
    集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现
    nginx请求转发配置
    nginx的conf文件,两种配置方式,第一种无ssl证书,第二种有ssl证书。
    Springboot集成WebSocket通信全部代码,即扣即用。
    Centos7上安装docker
    mysql 5.7 的 /etc/my.cnf
    【图嵌入】DeepWalk 和 Node2Vec
  • 原文地址:https://www.cnblogs.com/lipeng0824/p/4373717.html
Copyright © 2011-2022 走看看