0

いろいろ調べたのですが、できれば方法がわかりません...

私はこのテーブルを持っています:

CREATE TABLE bilanci (
  id              int AUTO_INCREMENT NOT NULL,
  medicoid        int NOT NULL,
  `1`             int NOT NULL DEFAULT 0,
  `2`             int NOT NULL DEFAULT 0,
  `3`             int NOT NULL DEFAULT 0,
  `4`             int NOT NULL DEFAULT 0,
  `5`             int NOT NULL DEFAULT 0,
  `6`             int NOT NULL DEFAULT 0,
  `7`             int NOT NULL DEFAULT 0,
  `8`             int NOT NULL DEFAULT 0,
  `9`             int NOT NULL DEFAULT 0,
  `10`            int NOT NULL DEFAULT 0,
  `11`            int NOT NULL DEFAULT 0,
  `12`            int NOT NULL DEFAULT 0,
  conguagliodic   decimal(10,2),
  totbilancianno  int DEFAULT 0,
  totpagato       decimal(12,2),
  totdapagare     decimal(12,2),
  conguaglio      decimal(10,2),
  rifanno         int NOT NULL,
  pvimun          decimal(10,4) NOT NULL DEFAULT 9.4432,
  PRIMARY KEY (id)
) ENGINE = InnoDB;

数字で名前が付けられたフィールドは月に対応しており、次のように選択する必要があります。

select medicoid, (month(curdate()) -2), totdapagare from bilanci

(month(curdate()) -2)選択する必要があるフィールドに対応する場所。

これは可能ですか?

4

1 に答える 1

0

データベース構造を正規化することをお勧めします。次のような1つのテーブルを作成できます。

CREATE TABLE bilanci (
  id              int AUTO_INCREMENT NOT NULL,
  medicoid        int NOT NULL,
  conguagliodic   decimal(10,2),
  totbilancianno  int DEFAULT 0,
  totpagato       decimal(12,2),
  totdapagare     decimal(12,2),
  conguaglio      decimal(10,2),
  pvimun          decimal(10,4) NOT NULL DEFAULT 9.4432,
  PRIMARY KEY (id)
) ENGINE = InnoDB;

および 2 番目のテーブル bilanci_month:

create table bilanci_month (
  id int auto_increment,
  bilanci_id int,
  rifanno int NOT NULL,
  month int NOT NULL,
  value int)

(bilanci_id は bilanci_month の外部キーとして定義できます)、select クエリは次のようになります。

select
  b.medicoid,
  coalesce(bm.value, 0),
  b.totdapagare from bilanci
from
  bilanci b left join bilanci_month bm
  on b.id = bm.bilanci_id and bm.month = month(curdate())-2

month(curdate())-2また、月が 1 月または 2 月の場合はどうなるかについても注意してください。たとえば、前年の 11 月または 12 月を取得するには、いくつかのロジックを実装する必要があります (そして、このロジックを結合に追加します)。

于 2016-11-07T11:31:23.263 に答える