gpt4 book ai didi

php - mysql中连续一行的总现值总和

转载 作者:行者123 更新时间:2023-11-29 00:19:36 26 4
gpt4 key购买 nike

考勤表

id name 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 month year

1 abcd P P P HOLIDAY P P P P P P HOLIDAY P P P P P P HOLIDAY P P P P P P HOLIDAY P P P P P P 01 2014

可以看到上面是考勤表。成员 abcd 在 1 月份参加了所有天数。所以她在 1 月份的总天数是 27。

所以在此表中我想添加另一个字段,该字段将显示特定月份成员的总天数。

请告诉我如何从这个表中计算当前日期 (P) 的数量。

CREATE TABLE `attendance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Ecode` varchar(100) NOT NULL,
`Ename` varchar(100) NOT NULL,
`01` varchar(200) NOT NULL,
`02` varchar(200) NOT NULL,
`03` varchar(200) NOT NULL,
`04` varchar(200) NOT NULL,
`05` varchar(200) NOT NULL,
`06` varchar(200) NOT NULL,
`07` varchar(200) NOT NULL,
`08` varchar(200) NOT NULL,
`09` varchar(200) NOT NULL,
`10` varchar(200) NOT NULL,
`11` varchar(200) NOT NULL,
`12` varchar(200) NOT NULL,
`13` varchar(200) NOT NULL,
`14` varchar(200) NOT NULL,
`15` varchar(200) NOT NULL,
`16` varchar(200) NOT NULL,
`17` varchar(200) NOT NULL,
`18` varchar(200) NOT NULL,
`19` varchar(200) NOT NULL,
`20` varchar(200) NOT NULL,
`21` varchar(200) NOT NULL,
`22` varchar(200) NOT NULL,
`23` varchar(200) NOT NULL,
`24` varchar(200) NOT NULL,
`25` varchar(100) NOT NULL,
`26` varchar(200) NOT NULL,
`27` varchar(200) NOT NULL,
`28` varchar(200) NOT NULL,
`29` varchar(200) NOT NULL,
`30` varchar(200) NOT NULL,
`31` varchar(200) NOT NULL,
`total_p` varchar(200) NOT NULL,
`total_sl` varchar(100) NOT NULL,
`total_al` varchar(100) NOT NULL,
`month` varchar(200) NOT NULL,
`year` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1

最佳答案

您的表定义将如下所示。

CREATE TABLE `attendance` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) ,
`1` VARCHAR(10),
`2` VARCHAR(10),
`3` VARCHAR(10),
...
`31` VARCHAR(10),
`month` INT(11),
`year` INT(11),
PRIMARY KEY (`id`)
)

你的 p-counter 表达式在 SQL 中看起来像这样

SELECT name,
IF(`1`='P',1,0)+IF(`2`='P',1,0)+IF(`3`='P',1,0)+IF(`4`='P',1,0)+
etc. etc. +IF(`31`='P',1,0) AS pcount,
month,
year
FROM attendance

如果这看起来像一个讨厌的表达,那是因为它确实是。我希望您了解这是一个真正难以维护的表定义。

编辑每人每天一行会更好。出勤表可能如下所示:

 id          int
name varchar
day DATE
attendance varchar(10)

然后您可以使用传统的 SQL 汇总报告生成一份显示每月出勤率的报告,类似这样。

SELECT name, 
DATE_FORMAT('%Y-%m-01') AS month_beginning,
SUM(IF(attendance = 'P', 1, 0)) AS days_present
FROM attendance
GROUP BY name, DATE_FORMAT('%Y-%m-01')
ORDER BY name, DATE_FORMAT('%Y-%m-01')

关于php - mysql中连续一行的总现值总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568121/

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