SELECT table2.*,
(SELECT Sum(qtde)
FROM table1
WHERE table1.cnes = table2.cnes
AND table1.procedimento = table2.procedimento
AND table1.mes = table2.mes
AND table1.ano = table2.ano
GROUP BY cnes,
procedimento,
ano,
mes) AS soma
FROM table2
这个代码在Access中工作得很好。
我有两张桌子。
表1有以下列:CNES, PROCEDIMENTO, MES, ANO, QTDE
它可能包含这样的信息(我不能改变这个事实,我从另一个软件获取信息)
+------+--------------+-----+-----+------+
| CNES | PROCEDIMENTO | MES | ANO | QTDE |
+------+--------------+-----+-----+------+
| C1 | P1 | M1 | A1 | 12 |
| C1 | P1 | M1 | A1 | 3 |
| C1 | P1 | M1 | A1 | 5 |
| C1 | P2 | M1 | A1 | 4 |
| C1 | P2 | M1 | A1 | 4 |
| C1 | P2 | M1 | A1 | 3 |
| C1 | P3 | M1 | A1 | 4 |
| C2 | P2 | M1 | A1 | 5 |
| C2 | P2 | M1 | A1 | 4 |
| C2 | P1 | M1 | A1 | 3 |
+------+--------------+-----+-----+------+
QTDE =一个月(MES)和一年(ANO)内从医院完成的手术数量(PROCEDIMENTO) (CNES)
因此,要知道从一家医院到一个月的手术数量,我需要搜索所有行,并将该月的所有行相加…
表2有以下列:CNES, PROCEDIMENTO, NOME, MES, ANO, META
该表包含医院在一个月内需要执行的手术数量(META)和手术的实际名称(NOME)。procdimento是一个数字,但我将其存储为字符串[code])
所以我的查询,在Access中工作,会从上面的例子中执行
Query1
+------+--------------+------+-----+-----+------+------------+
| CNES | PROCEDIMENTO | NOME | MES | ANO | META | SUM(QTDE) |
+------+--------------+------+-----+-----+------+------------+
| C1 | P1 | N1 | M1 | A1 | 23 | 20 |
| C1 | P2 | N2 | M1 | A1 | 20 | 11 |
| C1 | P3 | N3 | M1 | A1 | 04 | 4 |
| C2 | P2 | N2 | M1 | A1 | 05 | 9 |
| C2 | P1 | N1 | M1 | A1 | 01 | 3 |
+------+--------------+------+-----+-----+------+------------+
如果你仔细看,你会发现最后一列是该月的数量总和,所以我可以用它来查看医院在该月是否完成了应该完成的手术数量。
除此之外,我的查询不这样做,但我希望它…我需要另一列来显示% (SUM(QTDE)/META)。但是我需要让超过100%的%%变成100%……我需要小心除零的问题....
我认为这在MySQL 5.5.30中可以正常工作:
select *,
if(meta = 0 or soma > meta, 100, (soma/meta)*100) Percent
from
(
SELECT table2.*,
(SELECT Sum(qtde)
FROM table1
WHERE table1.cnes = table2.cnes
AND table1.procedimento = table2.procedimento
AND table1.mes = table2.mes
AND table1.ano = table2.ano
GROUP BY cnes,
procedimento,
ano,
mes) AS soma
FROM table2) TMP;