gpt4 book ai didi

view - 使用 CASE 和 SQLITE 匹配字段

转载 作者:行者123 更新时间:2023-12-03 18:01:30 25 4
gpt4 key购买 nike

我有一个带有学生姓名的 SQLite 数据库。每个学生都有不同的类(class)。我有一张包含学生成绩和类(class)的表格,还有一张按类型定义类(class)的表格。我想运行一个查询(我将保存为 CSV 以在 OpenOffice 中用作邮件合并的 Excel 文档)。我需要列出学生的数学成绩、历史成绩、科学成绩和英语成绩。但是,有些学生有不止一门数学、科学、英语或历史课。
(如何)我可以创建一个 CASE 语句(可能还有一个 View ),如果确实有多个 Math 类可以在 View 中列为示例 Math_Class_2 吗?

最佳答案

这个想法是让 SQL 完成工作,而不是为它做。

假设三个表:

学生(学生编号,学生姓名)

类(类号、类名)

结果(类(class)编号、学生编号、年级)

查询将是:

SELECT StudentName, group_concat(ClassName || "," || Grade)
FROM Student
INNER JOIN Result ON Result.StudentNo=Student.StudentNo
INNER JOIN Class ON Result.ClassNo=Class.ClassNo
GROUP BY Student.Studentno;

(group_concat 是 SQlite 的另一个后期添加。出现在 3.7 中)。

这是我使用的所有命令的转储:
CREATE TABLE [Student] (
[StudentNo] INTEGER NOT NULL PRIMARY KEY,
[StudentName] TEXT NULL
);
INSERT INTO "Student" VALUES(1,'Jimmy');
INSERT INTO "Student" VALUES(2,'Bob');
INSERT INTO "Student" VALUES(3,'Anna');
CREATE TABLE [Class] (
[ClassNo] INTEGER NOT NULL PRIMARY KEY,
[ClassName] TEXT NULL
);
INSERT INTO "Class" VALUES(1,'English');
INSERT INTO "Class" VALUES(2,'Algebra');
INSERT INTO "Class" VALUES(3,'Geometry');
INSERT INTO "Class" VALUES(4,'Pre-Cal');
CREATE TABLE [Result] (
[StudentNo] INTEGER NOT NULL,
[ClassNo] INTEGER NOT NULL,
[Grade] INTEGER NOT NULL,
PRIMARY KEY ([StudentNo],[ClassNo])
);
INSERT INTO "Result" VALUES(1,1,70);
INSERT INTO "Result" VALUES(1,2,75);
INSERT INTO "Result" VALUES(1,3,80);
INSERT INTO "Result" VALUES(2,1,85);
INSERT INTO "Result" VALUES(2,2,90);
INSERT INTO "Result" VALUES(3,4,95);

运行查询返回这个(你可能想调整你的分隔符):
Jimmy,English,70,Algebra,75,Geometry,80 Bob,English,85,Algebra,90 Anna,Pre-Cal,95

关于view - 使用 CASE 和 SQLITE 匹配字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com