No.2ベストアンサー
- 回答日時:
例1)単純に縦に出力したいときに使う。
select 課名,'予算' as 予実,nvl(予算金額,0) from 課マスタ
left outer join 予算マスタ on 課マスタ.課コード = 予算マスタ.課コード
union
select 課名,'実績' as 予実,nvl(実績金額,0) from 課マスタ
left outer join 実績マスタ on 課マスタ.課コード = 予算マスタ.課コード
order by 課名,予実
とすると、
1課 予算 10000
1課 実績 8500
2課 予算 20000
2課 実績 0
・・・
とでる。
例2)例1と違ってどちらか一方にしかないデータをどちらも出したいときに使う。
select 課名,sum(予算金額), sum(実績金額)
from (
select 課名,予算金額 as 予算金額,0 as 実績金額 from 予算マスタ
union
select 課名,0 as 予算金額,実績金額 as 実績金額 from 実績マスタ
)
group by 課名
order by 課名
とすると
1課 10000 8500
2課 20000 0 ←実績マスタなし
3課 0 8500 ←予算マスタなし
とでる。
例3)今年新規(過去3年間取引のなかった取引先も新規として扱う)で獲得した取引先の数
select count(*) from
(
select distinct 取引先コード from 売上マスタ where 年度 = 2012
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2011
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2010
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2009
)
例4)(これはどっちかというとシステム保守要件ですが。)
何らかの異常があったときに不整合データのチェックに使う
select * from Aマスタ_バックアップ
minus
select * from Aマスタ
Aマスタ_バックアップにあってAマスタにないものが出てくるので、
これらを調べたりする。
select * from Aマスタ
minus
select * from Aマスタ_バックアップ
逆のパターンのデータ。これも調べる。
とか。
例5)Orの代わりにunionを使うと便利なこともたまにある。
select * from table1 where Key1 between 1 and 3
union
select * from table1 where Key1 between 6 and 7
union
select * from table1 where Key1 between 12 and 18
select * from table1
where Key1 between 1 and 3 or Key1 between 6 and 7 or Key1 between 12 and 18
と書けばしまいなのだが、orを使うとインデックスを使ってくれないことがあるので、
orを使わないselectをunionしたほうが早いことがたまにある。
★table1が、5000万件あるときなどあくまで例外的な使い方です。
!!!普通は、orを使ったほうがいいです!!!
## SQLはこんな感じだったと思うというレベルで書いています。(うまく動かないかも)
## とりあえず、過去に使った例ですぐに思いついたパターンを挙げてみました。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学受験 日本史の受験勉強について 2 2022/11/22 19:00
- IT・エンジニアリング IT業界ほぼ未経験で28歳からインフラエンジニアになれますでしょうか 7 2023/05/04 17:41
- 簿記検定・漢字検定・秘書検定 4月から商業高校の会計科に通う予定の中学生です。現在春休みで、簿記検定3級を取得しようと考えており、 1 2023/03/04 14:40
- 消費税 来年からのインボイス、国が消費税を取り過ぎるケースも? 4 2022/11/10 22:23
- 中途・キャリア とある企業に面接に行きました。 ですが面接官の話と募集内容が違い頭がパニックになり本社の人事に連絡を 5 2023/08/18 19:42
- ノートパソコン 大学のレポート作成専用ノートパソコンとして、VAIO SX12(Core i7、32GB、1TB-S 5 2023/06/10 11:14
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- 相続税・贈与税 集金方法について 3 2023/01/14 19:04
- その他(パソコン・スマホ・電化製品) 半導体製造企業の出荷額データや資料を見ていると、ファウンドリ企業からの出荷分はそのファブレス企業の出 3 2023/02/26 06:51
- その他(ビジネススキル・経営ノウハウ) クラウドファウンディングによる新製品の販売支援要求。「あれ?この商品、もう完成品じゃね?」という疑問 2 2022/08/22 12:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
他のテーブルの抽出条件で更新...
-
MySQLで改行を含む文の登録のし...
-
SQLでグループ化した結果の件数...
-
ORACLEのUPDATEについて...
-
項目名の制限について
-
GROUP BYの記述方法について
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
セルの右クリックで出る項目を...
-
Vbaでアクセスからエクセルにリ...
-
変数が選択リストにありません
-
Accessでテーブル名やクエリ名...
-
Accessのフィールド数が255しか...
-
ACCESSでの改行コード
-
Accessのクエリでデータの入力...
-
ACCESSのクエリで集計で、先頭...
-
INSERT INTO ステートメントに...
-
BLOB型のPDF出力の方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
項目名の制限について
-
MySQLで改行を含む文の登録のし...
-
SQLでグループ化した結果の件数...
-
オラクルSQLの累計値取得方法に...
-
ORA-01722: 数値が無効です
-
SQL文 2つのテーブルから、グ...
-
列名無効について
-
フォームで検索 エラーの表示...
-
改行コードを削除して取得する...
-
3つのテーブルの結合
-
各店舗毎の最大売上の項目を取...
-
インサート文での条件の指定に...
-
Accessで期間指定の売上合計と...
-
アクセス レポート作成のため...
-
データベースから抽出した一覧...
-
SQL抽出方法に悩んでいます。 S...
-
GROUP BYの記述方法について
-
SQL文のエラーについて
-
AccessVBA コードをスキップし...
-
Oracleでテーブルの結合について
おすすめ情報