20260511mon-01
会計システムでは、システムごとに別テーブルで仕訳データが管理されていることがよくあります。
今回は テーブルA・B・C にそれぞれ異なるシステムの転記データが入っている状況を使って、2つのSQLの書き方を覚えましょう。
サンプルデータ
テーブルA(販売管理システム)
| システム名 | 借方金額 | 貸方金額 | 摘要 | 転記日 |
|---|---|---|---|---|
| 販売管理 | 100,000 | ” | '売上計上’ | 2024-04-01 |
| 販売管理 | ” | 50,000 | ” | 2024-04-03 |
| 販売管理 | 200,000 | ” | '返品修正’ | 2024-04-05 |
テーブルB(購買管理システム)
| システム名 | 借方金額 | 貸方金額 | 摘要 | 転記日 |
|---|---|---|---|---|
| 購買管理 | ” | 80,000 | ’仕入計上’ | 2024-04-02 |
| 購買管理 | 150,000 | ” | ” | 2024-04-04 |
| 購買管理 | ” | 120,000 | ’買掛金消込’ | 2024-04-06 |
テーブルC(給与システム)
| システム名 | 借方金額 | 貸方金額 | 摘要 | 転記日 |
|---|---|---|---|---|
| 給与 | 500,000 | ” | '給与支払’ | 2024-04-25 |
| 給与 | ” | 500,000 | ” | 2024-04-25 |
| 給与 | 30,000 | ” | '社会保険料’ | 2024-04-28 |
① WHERE — 「いずれかに値がある行」だけを取り出す
WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> '' は、3つの列のどれかが空でない行だけを残すフィルタです。
<> ''は「空文字でない=何か値が入っている」という意味ORでつなぐことで「どれか一つでも値があればOK」になる
SELECT システム名, 借方金額, 貸方金額, 摘要, 転記日
FROM テーブルA
WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> ''
このSQLを実行するとテーブルAの全3行が返ります(すべての行でいずれかに値があるため)。
② UNION ALL — 別テーブルの結果を縦につなげる
UNION ALL を使うと、複数のSELECT文の結果を縦に連結できます。
SELECT文1
UNION ALL
SELECT文2
UNION ALL
SELECT文3
重要なルール:SELECT する列の数と順番を全部そろえる
UNION ALL でつなぐSELECT文は、列の数・並び順が一致していないとエラーになります。
| OK | NG |
|---|---|
全部 システム名, 借方金額, 貸方金額, 摘要, 転記日 | 片方だけ列を追加・削除している |
組み合わせたSQL
①と②を組み合わせて、3テーブルを一覧化します。
'テーブルA' AS テーブル名 のように固定文字列を列として追加すると、どのテーブルのデータか一目でわかります。
SELECT 'テーブルA' AS テーブル名, システム名, 借方金額, 貸方金額, 摘要, 転記日
FROM テーブルA
WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> ''
UNION ALL
SELECT 'テーブルB' AS テーブル名, システム名, 借方金額, 貸方金額, 摘要, 転記日
FROM テーブルB
WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> ''
UNION ALL
SELECT 'テーブルC' AS テーブル名, システム名, 借方金額, 貸方金額, 摘要, 転記日
FROM テーブルC
WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> ''
実行結果
| テーブル名 | システム名 | 借方金額 | 貸方金額 | 摘要 | 転記日 |
|---|---|---|---|---|---|
| テーブルA | 販売管理 | 100,000 | ” | '売上計上’ | 2024-04-01 |
| テーブルA | 販売管理 | ” | 50,000 | ” | 2024-04-03 |
| テーブルA | 販売管理 | 200,000 | ” | '返品修正’ | 2024-04-05 |
| テーブルB | 購買管理 | ” | 80,000 | ’仕入計上’ | 2024-04-02 |
| テーブルB | 購買管理 | 150,000 | ” | ” | 2024-04-04 |
| テーブルB | 購買管理 | ” | 120,000 | ’買掛金消込’ | 2024-04-06 |
| テーブルC | 給与 | 500,000 | ” | '給与支払’ | 2024-04-25 |
| テーブルC | 給与 | ” | 500,000 | ” | 2024-04-25 |
| テーブルC | 給与 | 30,000 | ” | '社会保険料’ | 2024-04-28 |
まとめ
| ポイント | 内容 |
|---|---|
<> '' | 空文字でない=値がある |
OR | どれか一つでも条件を満たせばOK |
UNION ALL | 複数テーブルの結果を縦につなげる |
| UNION ALLのルール | SELECT する列の数・順番を全部そろえる |