質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2667閲覧

あるカラムの値によって別のカラムの値を取得するsql文について

taro9292

総合スコア26

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/04/23 03:26

place カラムの値とshowカラムの値を対応させたいです。
例えば、placeの値が2ならshow1の値を抽出する。
placeの値が3ならshow2の値を抽出する。
すべての値を抽出したら、その合計を抽出する。

という文を考えていますが、なにか解決策があると助かります。

table名:A1

   number | place | show0 | show1 | show2
-------------+-------+-------+-------+-------
1 | 2 | 110 | 110 | 210
2 | 1 | 110 | 140 | 140
4 | 1 | 110 | 160 | 170
5 | 2 | 110 | 110 | 170
6 | 1 | 110 | 160 | 150
9 | 3 | 260 | 260 | 9999
10 | 3 | 120 | 140 | 110
11 | 1 | 110 | 170 | 170
12 | 3 | 150 | 160 | 110

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

たぶん、行の合計(小計、中計など)も必要になりそうなので、
PostgreSQL 9.5の新機能CUBEを使ってみた。 も参考に。

投稿2020/04/23 20:26

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まずはplaceによって選択するカラムを変えてみます。place=1については質問に指定がなかったので、空になります。

SQL

1select 2 place, 3 case 4 when place = 2 then show1 5 when place = 3 then show2 6 end 7from a1; 8 9 place | case 10-------+------ 11 2 | 110 12 1 | 13 1 | 14 2 | 110 15 1 | 16 3 | 9999 17 3 | 110 18 1 | 19 3 | 110 20(9 rows)

合計はplaceごとに行うならこんな感じでいかがでしょうか。

SQL

1select 2 place, 3 sum( 4 case 5 when place = 2 then show1 6 when place = 3 then show2 7 end 8 ) 9from a1 10group by place; 11 12 place | sum 13-------+------- 14 3 | 10219 15 2 | 220 16 1 | 17(3 rows)

投稿2020/04/23 04:29

Kenji.Noguchi

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro9292

2020/04/23 05:33

ありがとうございます。 完璧です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問