![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
■一番最初に値が入っている(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で質問しましょう!
似たような質問が見つかりました
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Oracle SQLの書き方について 1 2023/04/13 09:54
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
列が存在しないと言われる
-
0の除算
-
PostgreSQLで表結合+DELETEしたい
-
動的に生成したカラムを使ったF...
-
RDB経験者向けのAccess参考書
-
INSERTできない
-
複数キーワードでのあいまい検索
-
DB2でUNIQUE制約を削除したい
-
COPY時のtimestamp型について
-
INSERTできるレコード数を制限...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Access テキスト型に対する指定...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
必須入力項目と入力必須項目
-
Accessのフィールド数が255しか...
-
【Access】フォームで自動計算...
-
Accessでコードを入れると名前...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
0の除算
-
constraint と index の違い
-
INSERTできるレコード数を制限...
-
長いSQL文を実行するには?
-
PostgreSQLで表結合+DELETEしたい
-
alter tableすると、処理が止ま...
-
COPY時のtimestamp型について
-
DBから日付順に指定件数の削除...
-
動的に生成したカラムを使ったF...
-
SQLで特定データがNULLなら別デ...
-
複数キーワードでのあいまい検索
-
■一番最初に値が入っている(Nul...
-
postgreSQLの日付を変数にする...
-
PostgreSQLで、元テーブルをコ...
-
SQLite:項目が存在しない場合の...
-
INSERTできない
-
powergres(postgres)にalter文...
-
SQL における変数の宣言と代入...
-
大量データを更新したら、処理...
おすすめ情報