・1000番代と9002,9004,9005番代が左側、2000番代と3000番代が右側になるようにする。
この結果を出すためのSQLコマンドがうまくいきませんgnumの列を見ると並びがきれいに並ばなくなります。
左側に表示するコードと、右側に表示するコードに 規則性や共通点が無いですから
AND x.勘定科目コード \ 1000 = y.勘定科目コード \ 1000
という区分けが、意味をなさなくなったのが原因です。
とはいえ、
SQL文の記述が、読みにくくて 見通しが悪い場合は
条件の分岐や、マジックナンバーの追記 といった手法を採用すると
記述がますます汚くなりますから
設計を見直したり工夫するのが、定番の解決方法になります。
■ 貸借対照表
勘定科目コード | 勘定科目 | 金額(資産) | 金額(負債) |
---|---|---|---|
700 | X | 450 | -450 |
1000 | Z | 25000 | -25000 |
1001 | あ | 8100 | -8100 |
1020 | い | 0 | 0 |
1891 | う | 1200 | -1200 |
1999 | え | 500000 | -500000 |
2000 | カ | -120000 | 120000 |
2888 | キ | 7000 | -7000 |
2999 | ク | 0 | 0 |
3000 | た | 0 | 0 |
3001 | ち | -10000 | 10000 |
3002 | つ | -14000 | 14000 |
3003 | て | 0 | 0 |
8999 | A | 4000 | -4000 |
9000 | + | 5500 | -5500 |
9001 | ー | 450 | -450 |
9002 | * | 3200 | -3200 |
9003 | ? | -8000 | 8000 |
9004 | ¥ | 15000 | -15000 |
9005 | ~ | 0 | 0 |
9006 | # | -2500 | 2500 |
9999 | ! | 54321 | -54321 |
だとして | |||
まずは、条件を入力するためのテーブル T_条件 を作ります。 | |||
` sql | |||
CREATE TABLE T_条件 | |||
( |
rid AUTOINCREMENT PRIMARY KEY
, 種別 INT NOT NULL
, コードfrom INT NOT NULL
, コードto INT NOT NULL
);
■ テーブルデータ
| rid | 種別 | コードfrom | コードto |
|-----|------|------------|----------|
| 1 | 0 | 1001 | 1999 |
| 2 | 0 | 9002 | 9002 |
| 3 | 0 | 9004 | 9005 |
| 4 | 1 | 2000 | 3001 |
| 5 | 2 | 4000 | 4999 |
| 6 | 3 | 5000 | 5999 |
通報 ...