从两个表中获取每日报告
Getting the daywise report from two tables
我想从两个 table
生成日间报告
Table 1: opd
CREATE TABLE `opd` (
`id` int(50) NOT NULL,
`Date` date NOT NULL,
`time` time NOT NULL,
`opd_no` varchar(150) NOT NULL,
`patientid` varchar(150) DEFAULT NULL,
`name` varchar(150) NOT NULL,
);
Table结构
id
Date
Time
opd_no
Patient_id
name
1
2022-03-02
18:30:10
OPD/2122/1
PT01
Siba
2
2022-03-03
18:30:10
OPD/2122/2
PT02
Deba
3
2022-03-04
18:30:10
OPD/2122/3
PT03
Haris
4
2022-03-04
18:31:10
OPD/2122/4
PT04
ravish
Table 2: ipd_pn
CREATE TABLE `ipd_pn` (
`id` int(11) NOT NULL,
`ipd_no` varchar(40) DEFAULT NULL,
`patientid` varchar(170) NOT NULL,
`opd_reg_date` date DEFAULT NULL,
`time` time DEFAULT NULL,
`opd` varchar(40) DEFAULT NULL,
`date` date DEFAULT NULL,
)
Table结构
id
IPD_no
Patient_id
opd_Reg_date
time
opd_no
date
1
IPD/2122/1
PT01
2022-03-02
15:40:10
OPD/2122/1
2022-03-02
2
IPD/2122/2
PT03
2022-03-04
16:35:10
OPD/2122/3
2022-03-03
3
IPD/2122/3
PT02
2022-03-03
15:45:10
OPD/2122/2
2022-03-03
T 尝试在白天生成以下查询生成的 opdno 数量
SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd
WHERE (date BETWEEN '2022-02-1' AND '2022-03-28')
GROUP BY Date
得到如下输出
date
total_opd
2022-03-02
1
2022-03-03
1
2022-03-04
2
但是我无法生成在这个日期期间生成了多少 ipd no。
请帮忙。
我想要一份如下的报告
date
total_opd
total_ipd
2022-03-02
1
1
2022-03-03
1
1
2022-03-04
2
1
我试过连接查询,即
SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd 0
INNER JOIN ipd_pn i ON o.Date = i.date
WHERE (date BETWEEN '2022-02-1' AND '2022-02-28')
GROUP BY Date
但这会导致日期歧义错误。
所以请尝试帮助我如何从 table 中生成报告。
您可以尝试使用 UNION ALL
在子查询中组合两个表,然后使用标志列来表示来自 opd
或 ipd_pn
的行
SELECT date,
SUM(flag = 1) total_opd,
SUM(flag = 2) total_ipd
FROM (
SELECT DATE(Date) AS date, 1 flag
FROM opd
UNION ALL
SELECT Reg_date,2
FROM ipd_pn
) t1
WHERE date between '2022-02-1' and '2022-03-28'
GROUP BY Date
我想从两个 table
生成日间报告Table 1: opd
CREATE TABLE `opd` (
`id` int(50) NOT NULL,
`Date` date NOT NULL,
`time` time NOT NULL,
`opd_no` varchar(150) NOT NULL,
`patientid` varchar(150) DEFAULT NULL,
`name` varchar(150) NOT NULL,
);
Table结构
id | Date | Time | opd_no | Patient_id | name |
---|---|---|---|---|---|
1 | 2022-03-02 | 18:30:10 | OPD/2122/1 | PT01 | Siba |
2 | 2022-03-03 | 18:30:10 | OPD/2122/2 | PT02 | Deba |
3 | 2022-03-04 | 18:30:10 | OPD/2122/3 | PT03 | Haris |
4 | 2022-03-04 | 18:31:10 | OPD/2122/4 | PT04 | ravish |
Table 2: ipd_pn
CREATE TABLE `ipd_pn` (
`id` int(11) NOT NULL,
`ipd_no` varchar(40) DEFAULT NULL,
`patientid` varchar(170) NOT NULL,
`opd_reg_date` date DEFAULT NULL,
`time` time DEFAULT NULL,
`opd` varchar(40) DEFAULT NULL,
`date` date DEFAULT NULL,
)
Table结构
id | IPD_no | Patient_id | opd_Reg_date | time | opd_no | date |
---|---|---|---|---|---|---|
1 | IPD/2122/1 | PT01 | 2022-03-02 | 15:40:10 | OPD/2122/1 | 2022-03-02 |
2 | IPD/2122/2 | PT03 | 2022-03-04 | 16:35:10 | OPD/2122/3 | 2022-03-03 |
3 | IPD/2122/3 | PT02 | 2022-03-03 | 15:45:10 | OPD/2122/2 | 2022-03-03 |
T 尝试在白天生成以下查询生成的 opdno 数量
SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd
WHERE (date BETWEEN '2022-02-1' AND '2022-03-28')
GROUP BY Date
得到如下输出
date | total_opd |
---|---|
2022-03-02 | 1 |
2022-03-03 | 1 |
2022-03-04 | 2 |
但是我无法生成在这个日期期间生成了多少 ipd no。
请帮忙。
我想要一份如下的报告
date | total_opd | total_ipd |
---|---|---|
2022-03-02 | 1 | 1 |
2022-03-03 | 1 | 1 |
2022-03-04 | 2 | 1 |
我试过连接查询,即
SELECT DATE(Date) AS date, COUNT(opdno) AS total_opd
FROM opd 0
INNER JOIN ipd_pn i ON o.Date = i.date
WHERE (date BETWEEN '2022-02-1' AND '2022-02-28')
GROUP BY Date
但这会导致日期歧义错误。
所以请尝试帮助我如何从 table 中生成报告。
您可以尝试使用 UNION ALL
在子查询中组合两个表,然后使用标志列来表示来自 opd
或 ipd_pn
SELECT date,
SUM(flag = 1) total_opd,
SUM(flag = 2) total_ipd
FROM (
SELECT DATE(Date) AS date, 1 flag
FROM opd
UNION ALL
SELECT Reg_date,2
FROM ipd_pn
) t1
WHERE date between '2022-02-1' and '2022-03-28'
GROUP BY Date