2つのテーブルからのデータ抽出について
2025-04-05 18:58
以下悩んでおります。ご教示よろしくお願いいたします
2つのテーブルがあり、1つ目は「メインテーブル」、2つ目は「申請テーブル」です。
メインテーブルには、ID、申請コード、取引先名の3つの情報が格納されています。
申請テーブルには、申請コードと申請名の2つの情報が格納されています。
これらのテーブルから、ID、申請コード、取引先名、申請名という4つの情報を取得したいのですが、申請名は特定のものだけ抽出したいと考えています。
申請名は申請コード1つに対して複数存在し、その中から「〇〇申請」と「△△申請」のみを取り出したいです。
最終的に、以下の様な形式でデータを出力したいと考えています。
【ID】 【取引先名】 【申請コード】 【〇〇申請】 【△△申請】
【001】 【AAA株式会社】 【0001】 【TRUE】 【TRUE】
【002】 【BBB株式会社】 【0002】 【TRUE】 【FALSE】
【003】 【CCC株式会社】 【0003】 【FALSE】 【TRUE】
【004】 【DDD株式会社】 【0004】 【FALSE】 【FALSE】
上記のように各行にID、取引先名、申請コードが記載され、「〇〇申請」と「△△申請」の欄には、該当する申請コードにその申請名が存在すればTRUE、存在しなければFALSEと表示されます。
どのようにすればこのようなデータ抽出を実現できるでしょうか?
回答を投稿するにはログインが必要です。
かわせみ様
お世話になっております
目的(希望)の形で抽出することができました
ようやく先に進めそうです
本当にありがとうございました
お世話になっております
目的(希望)の形で抽出することができました
ようやく先に進めそうです
本当にありがとうございました
こんにちは。
複数行あるデータに対して、列を増やしていきたいものはいわゆる「縦横変換」というものですね。シート・セル計算式でやろうとするとかなり複雑になりそうです。テーブルにデータがあるのでSQLで取得する方が簡単と思います。
「SQLアクション」でデータが取り出せるか試してみてください。
https://cloud.celf.jp/celf-help/ja/texts/extension_sql/about_sql.html
-------
SELECT
ID
, 取引先名
, 申請コード
, CASE WHEN sum(maru存在) = 1 THEN 'TRUE' ELSE 'FALSE' END AS maru --★3
, CASE WHEN sum(sankaku存在) = 1 THEN 'TRUE' ELSE 'FALSE' END AS sankaku --★3
FROM
(
SELECT
m.ID
, m.取引先名
, m.申請コード
, CASE WHEN s.申請名 = '〇〇申請' THEN 1 ELSE 0 END AS maru存在 --★2
, CASE WHEN s.申請名 = '△△申請' THEN 1 ELSE 0 END AS sankaku存在 --★2
FROM
メインテーブル m
LEFT JOIN 申請テーブル s --★1
ON s.申請コード = m.申請コード
) X
group by
ID
, 取引先名
, 申請コード
-------
結果
ID 取引先名 申請コード maru sankaku
ID001 AAA株式会社 S0001 TRUE TRUE
ID002 BBB株式会社 S0002 TRUE FALSE
ID003 CCC株式会社 S0003 FALSE TRUE
ID004 DDD株式会社 S0004 FALSE FALSE
-------
★1で2つのテーブルを[申請コード]でつなげます(LEFT JOIN)
★2で[申請名]が○なら1、そうでないなら0と(0/1)に置き換えます
この結果に[maru存在]と名付けます △[sankaku存在]も同様
★3で[maru存在]の合計(sum)をして1ならばTRUE、なければFALSEと表示します
[sankaku存在]の合計(sum)をして1ならばTRUE、なければFALSEと表示します
使用データ
-------
メイン
ID 申請コード 取引先名
ID001 S0001 AAA株式会社
ID002 S0002 BBB株式会社
ID003 S0003 CCC株式会社
ID004 S0004 DDD株式会社
-------
申請
ID 申請コード 申請名
申請001 S0001 〇〇申請
申請002 S0001 △△申請
申請003 S0002 〇〇申請
申請004 S0003 △△申請
*データおよびSQLはご提示された内容から推測したものです。実際のデータによって欲しい結果にならない場合があります。
複数行あるデータに対して、列を増やしていきたいものはいわゆる「縦横変換」というものですね。シート・セル計算式でやろうとするとかなり複雑になりそうです。テーブルにデータがあるのでSQLで取得する方が簡単と思います。
「SQLアクション」でデータが取り出せるか試してみてください。
https://cloud.celf.jp/celf-help/ja/texts/extension_sql/about_sql.html
-------
SELECT
ID
, 取引先名
, 申請コード
, CASE WHEN sum(maru存在) = 1 THEN 'TRUE' ELSE 'FALSE' END AS maru --★3
, CASE WHEN sum(sankaku存在) = 1 THEN 'TRUE' ELSE 'FALSE' END AS sankaku --★3
FROM
(
SELECT
m.ID
, m.取引先名
, m.申請コード
, CASE WHEN s.申請名 = '〇〇申請' THEN 1 ELSE 0 END AS maru存在 --★2
, CASE WHEN s.申請名 = '△△申請' THEN 1 ELSE 0 END AS sankaku存在 --★2
FROM
メインテーブル m
LEFT JOIN 申請テーブル s --★1
ON s.申請コード = m.申請コード
) X
group by
ID
, 取引先名
, 申請コード
-------
結果
ID 取引先名 申請コード maru sankaku
ID001 AAA株式会社 S0001 TRUE TRUE
ID002 BBB株式会社 S0002 TRUE FALSE
ID003 CCC株式会社 S0003 FALSE TRUE
ID004 DDD株式会社 S0004 FALSE FALSE
-------
★1で2つのテーブルを[申請コード]でつなげます(LEFT JOIN)
★2で[申請名]が○なら1、そうでないなら0と(0/1)に置き換えます
この結果に[maru存在]と名付けます △[sankaku存在]も同様
★3で[maru存在]の合計(sum)をして1ならばTRUE、なければFALSEと表示します
[sankaku存在]の合計(sum)をして1ならばTRUE、なければFALSEと表示します
使用データ
-------
メイン
ID 申請コード 取引先名
ID001 S0001 AAA株式会社
ID002 S0002 BBB株式会社
ID003 S0003 CCC株式会社
ID004 S0004 DDD株式会社
-------
申請
ID 申請コード 申請名
申請001 S0001 〇〇申請
申請002 S0001 △△申請
申請003 S0002 〇〇申請
申請004 S0003 △△申請
*データおよびSQLはご提示された内容から推測したものです。実際のデータによって欲しい結果にならない場合があります。