0
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でうまく機能します。

2つのテーブルがあります。

表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 =病院(CNES)からの1か月(MES)および1年(ANO)に行われた手順の量(PROCEDIMENTO)

したがって、1つの病院から1か月までの手順の量を知るには、すべての行を検索し、その月のすべての行を合計する必要があります...

表2には次の列があります。CNES, PROCEDIMENTO, NOME, MES, ANO, META

この表には、病院が1か月に実行する必要のある手順の数(META)と手順の実際の名前が含まれています(NOME。PROCEDIMENTOは数値ですが、string [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%にする必要があります...そして、ゼロ除算の問題に注意する必要があります...。

4

1 に答える 1

0

これはMySQL5.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;
于 2013-03-20T23:27:40.193 に答える