我正在使用 Mysql DB 在 php 中做一个学校管理系统。我被困在我的项目中。请任何人建议我做错了什么。
我的数据库中有两个表;一个是存储Students
记录,另一个是attendance
明智地存储他们的日常
现在我想显示当月特定班级所有学生的报告,无论他们在场还是缺席。但我只在出勤表中捕获缺席学生的详细信息。
我写了 sql 查询来显示这里的结果是:
SELECT tab.class, attend, DATE, ta.rollno, ta.StdNm
FROM tbl_absentees tab, tbl_admission ta
WHERE ta.Cls = class
AND ta.rollno = tab.rollno
AND class =22
AND attend = 'A'
AND DATE = '2013-06-07';
Run Code Online (Sandbox Code Playgroud)
结果是:
Class Attend RollNo StudentName
Run Code Online (Sandbox Code Playgroud)
但我想以 31 天的表格方式显示,如果出席=A 显示 A 表示缺席天数,否则显示“P”表示剩余天数
我怎样才能在mysql中做到这一点?任何人都可以建议/给我一个想法来实现这一目标。
对不起,我的问题有误。实际上,我想显示特定月份的出勤报告,其中数据来自两个表:
现在我想显示象报告这样。
我有两个查询查询 1:
SELECT
e.eid, e.item as 'ITEM', SUM(s.qty) as 'TOTAL SOLD'
from
tbl_sales s,
tbl_matentry e
WHERE
e.eid = s.item
GROUP By e.eid ;
Run Code Online (Sandbox Code Playgroud)
结果 1:
+---------+-------------+---------------+
| eid | ITEM | TOTAL SOLD |
+---------+-------------+---------------+
| 1 | rupa | 5 |
| 2 | pan america | 3 |
| 3 | John Player | 10 |
| 4 | classmate | 11 |
| 5 | lepakshi | 55 |
| 6 | lee | 14 | …
Run Code Online (Sandbox Code Playgroud) 我的表结构如下图所示 主题表
+----+------+------+--------+---------+
| id | C_Id | G_Id | status | subject |
+----+------+------+--------+---------+
| 1 | 13 | 4 | 1 | Telugu |
| 2 | 13 | 4 | 1 | Hindi |
| 3 | 13 | 4 | 1 | English |
| 4 | 13 | 4 | 1 | Maths |
| 5 | 13 | 4 | 1 | Physics |
| 6 | 13 | 4 | 1 | Biology …
Run Code Online (Sandbox Code Playgroud) 我想写一个带有一些固定列和动态列的选择语句。这里的动态列名称是另一个表中的行。
我试过这个,但得到错误。请告诉我我的错误在哪里
set @sql=(Select subject from tbl_subjects where C_Id=22);
SELECT
ta.rollno,
ta.StdNm,
tc.C_Name,
@sql
FROM
tbl_cmarks tm,
tbl_admission ta,
tbl_classes tc
WHERE
tm.Cid = tc.C_Id
AND ta.rollno = tm.rollno
AND tm.Cid = 22 and tm.Examid=9
Run Code Online (Sandbox Code Playgroud)
Mysql 显示:
错误代码:1242。子查询返回多于 1 行
谁能告诉我如何在mysql中做到这一点?
我正在 mysql 中生成出勤报告,通过从 3 个表中提取数据,例如从招生表中提取学生姓名和卷号,缺席表中的缺席详细信息,并且我创建了一个日历表来生成所需的输出我可以在这里生成输出我的数据库和我生成的结果。SQL小提琴
现在我想将表中出现“SUN”的任何位置显示为“S”,并且如果报告中有任何假期日期,则应将它们显示为“H”。
谁能告诉我在查询中我应该怎么做才能产生预期的结果?
我的数据:
CREATE TABLE tbl_admission
(`StudentName` varchar(5), `RollNo` int, `Class` int)
;
INSERT INTO tbl_admission
(`StudentName`, `RollNo`, `Class`)
VALUES
('Naren', 1, 22),
('Srinu', 2, 22),
('Blah', 3, 22)
;
CREATE TABLE tbl_absentees
(`Date` datetime, `Status` varchar(1), `RollNo` int, `Class` int)
;
INSERT INTO tbl_absentees
(`Date`, `Status`, `RollNo`, `Class`)
VALUES
('2013-06-01 00:00:00', 'A', 1, 22),
('2013-06-02 00:00:00', 'A', 1, 22),
('2013-06-03 00:00:00', 'A', 1, 22),
('2013-06-04 00:00:00', 'A', 1, 22),
('2013-06-05 00:00:00', 'A', 1, …
Run Code Online (Sandbox Code Playgroud) 我正在生成一份报告以显示未结费用,例如哪种费用类型,该费用类型的固定金额,该费用类型支付的金额以及最终该费用类型支付的余额金额。
在这里,我从 5 个表中提取数据,例如来自 Classes 表的 Class Names、来自招生表的 Roll no & Student Name、来自 Feevars 表的 Fee Types、来自 studentfees 表的费用类型固定金额,以及最后从费用收集表中为费用类型支付的金额.
我可以通过加减运算在 select 语句中提及费用类型名称来生成部分结果。
这是完整的数据库和我的查询产生的结果。请在此演示中查看 **@我的查询,在选择语句中我手动提到了费用类型。但是我想生成结果而不将费用类型作为列名。
为此,我做了一件事,我将所有费用类型都放入了这样的 sql 变量中
set @sqlList = null;SELECT GROUP_CONCAT(concat('tsf.', Replace(FeeName,' ',''))) INTO @sqlList FROM tbl_feevars;
Run Code Online (Sandbox Code Playgroud)
这将导致所有费用类型成为单行作为列名。最后,我编写了代码来生成我所期望的输出,但是我收到了类似错误代码 1064:您的 sql 语法错误。
这是我的最终代码
请任何人告诉我,我的 sql 查询有什么错误。并建议我,如果有的话??其他方式来做这个报告。
我的表:
CREATE TABLE `tbl_admission` (
`AdmNo` varchar(50) NOT NULL,
`Grp` varchar(45) NOT NULL,
`Cls` varchar(45) NOT NULL,
`rollno` int(11) NOT NULL,
`StdNm` varchar(50)
);
CREATE TABLE `tbl_classes` ( …
Run Code Online (Sandbox Code Playgroud)