
■一番最初に値が入っている(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ランキング
-
大量データを更新したら、処理...
-
列が存在しないと言われる
-
EXCELデータをリンクテーブルと...
-
データベース内のテーブル名の取得
-
Access97について
-
AccessからExcelのデータを消す...
-
Excel 2019 のピボットテーブル...
-
Accessクエリーで両方のテーブ...
-
「直需」の意味を教えてください
-
Accessのマクロ。
-
どれがPrimary Key、ForeignKey...
-
importについて
-
Accessでテーブル名やクエリ名...
-
Accessでvlookupみたいなことは...
-
Accessでの集計用クエリの作成
-
access beforeupdateにおいて
-
Oracleのテーブル作成スクリプ...
-
FROM の中で CASE を使えるでし...
-
Access2000のクエリについて
-
テーブルの存在チェックについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
alter tableすると、処理が止ま...
-
長いSQL文を実行するには?
-
DBから日付順に指定件数の削除...
-
PostgreSQLで表結合+DELETEしたい
-
INSERTできるレコード数を制限...
-
COPY時のtimestamp型について
-
0の除算
-
■一番最初に値が入っている(Nul...
-
constraint と index の違い
-
特定の位置が特定の範囲に含ま...
-
INSERTできない
-
SQLで特定データがNULLなら別デ...
-
SQLite:項目が存在しない場合の...
-
powergres(postgres)にalter文...
-
postgreSQLの日付を変数にする...
-
インデックスの削除と、インデ...
-
リストを出力する際にSQLでデー...
-
DB2 「既存カラムへのnot null...
-
CREATE INDEXはどういう時に使...
おすすめ情報