Skip to content

20260511mon-01

Published: at 15:00

20260511mon-01

会計システムでは、システムごとに別テーブルで仕訳データが管理されていることがよくあります。
今回は テーブルA・B・C にそれぞれ異なるシステムの転記データが入っている状況を使って、2つのSQLの書き方を覚えましょう。


サンプルデータ

テーブルA(販売管理システム)

システム名借方金額貸方金額摘要転記日
販売管理100,000'売上計上’2024-04-01
販売管理50,0002024-04-03
販売管理200,000'返品修正’2024-04-05

テーブルB(購買管理システム)

システム名借方金額貸方金額摘要転記日
購買管理80,000’仕入計上’2024-04-02
購買管理150,0002024-04-04
購買管理120,000’買掛金消込’2024-04-06

テーブルC(給与システム)

システム名借方金額貸方金額摘要転記日
給与500,000'給与支払’2024-04-25
給与500,0002024-04-25
給与30,000'社会保険料’2024-04-28

① WHERE — 「いずれかに値がある行」だけを取り出す

WHERE 借方金額 <> '' OR 貸方金額 <> '' OR 摘要 <> '' は、3つの列のどれかが空でない行だけを残すフィルタです。

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文は、列の数・並び順が一致していないとエラーになります。

OKNG
全部 システム名, 借方金額, 貸方金額, 摘要, 転記日片方だけ列を追加・削除している

組み合わせた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,0002024-04-03
テーブルA販売管理200,000'返品修正’2024-04-05
テーブルB購買管理80,000’仕入計上’2024-04-02
テーブルB購買管理150,0002024-04-04
テーブルB購買管理120,000’買掛金消込’2024-04-06
テーブルC給与500,000'給与支払’2024-04-25
テーブルC給与500,0002024-04-25
テーブルC給与30,000'社会保険料’2024-04-28

まとめ

ポイント内容
<> ''空文字でない=値がある
ORどれか一つでも条件を満たせばOK
UNION ALL複数テーブルの結果を縦につなげる
UNION ALLのルールSELECT する列の数・順番を全部そろえる