
■一番最初に値が入っている(Nullでない)カラム名を取得するには?
会社の上司が、上記の条件をSQL文一つで出来るというのですが、
postgres SQLの書き方が思いつかず、大変困っています。
状況を説明します。
主に以下のようなカラムを持つテーブルがあります。
ID, 年, 月, タイプ, price_1d, price_2d, price_3d, ..., price_31d
price_?d には null or 数字が入ります。
上記のような状況で、
price_1d ~ price_31d の順で最初に値が入っているカラム名を取得し、
最初に値があるのは何年何月何日と判定したいというわけです。
おまけに、タイプには 0 or 1 が入り、
その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。
このような条件をSQL一つで抽出することははたして本当に可能なのでしょうか?
何かしら解決の糸口となるヒントだけでも構いませんので、
何か情報を頂けると大変ありがたいです。
また、そんなの出来ません、
という情報でもいただけると嬉しいです。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
PostgreSQLのCASE文を調べると良いです。
この回答への補足
おそらく
>その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。
という箇所を言っているのだと思いますが、
そこは対して問題ではないです。
問題は、一定の条件にて抽出した「カラム名」を取得しないといけないというところです。
No.4
- 回答日時:
対象となる列が固定なら他の方が回答しているようにCASE式を使用するか、coalesce関数を使用すればNULLでない最初の値を1つのSQL文で取得できます。
「タイプ」列についてもCASE式で対応すればいいでしょう。SELECT CASE WHEN タイプ = 0 THEN coalesce(price_1d, price_2d, price_3d, ..., price_31d)
WHEN タイプ = 1 THEN coalesce(price2_1d, price2_2d, price2_3d, ..., price2_31d)
ELSE NULL
END
FROM テーブル;
case文で無事に出来ました。
ありがとうございました。
先にNo.1さんが同じ回答をしていたため、
そちらの方をベストアンサーとさせていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INSERTできるレコード数を制限...
-
列が存在しないと言われる
-
動的に生成したカラムを使ったF...
-
COPY時のtimestamp型について
-
DBから日付順に指定件数の削除...
-
■一番最初に値が入っている(Nul...
-
PostgreSQLで表結合+DELETEしたい
-
SQLで特定データがNULLなら別デ...
-
長いSQL文を実行するには?
-
powergres(postgres)にalter文...
-
CREATE INDEXはどういう時に使...
-
特定の位置が特定の範囲に含ま...
-
インデックスの削除と、インデ...
-
PostgreSQLで、元テーブルをコ...
-
SQLite:項目が存在しない場合の...
-
alter tableすると、処理が止ま...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
テーブルの存在チェックについて
-
INSERT INTO ステートメントに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
INSERTできるレコード数を制限...
-
PostgreSQLで表結合+DELETEしたい
-
長いSQL文を実行するには?
-
DBから日付順に指定件数の削除...
-
動的に生成したカラムを使ったF...
-
0の除算
-
■一番最初に値が入っている(Nul...
-
COPY時のtimestamp型について
-
alter tableすると、処理が止ま...
-
SQLで特定データがNULLなら別デ...
-
constraint と index の違い
-
SQLite:項目が存在しない場合の...
-
Oracleの制約構文に関して
-
INSERTできない
-
powergres(postgres)にalter文...
-
DB2でUNIQUE制約を削除したい
-
SQLiteに関数追加
-
DB2 「既存カラムへのnot null...
-
複数キーワードでのあいまい検索
おすすめ情報