- ベストアンサー
最初に値が入っているカラム名を取得する方法
- SQLを使用して、テーブル内の最初に値が入っているカラム名を取得する方法について説明します。
- 指定されたテーブルには、price_1dからprice_31dまでのカラムがあります。
- 最初に値が入っているカラム名を特定するために、NULLチェックおよび日付チェックを行う必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
PostgreSQLのCASE文を調べると良いです。
その他の回答 (3)
- yamada59
- ベストアンサー率74% (29/39)
対象となる列が固定なら他の方が回答しているように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さんが同じ回答をしていたため、 そちらの方をベストアンサーとさせていただきました。
- daifucream
- ベストアンサー率50% (1/2)
最初に値が入っているカラム名を返すだけであれば 以下のようにしてできると思います。 CASE WHEN price_1d IS NOT NULL THEN 'price_1d ' WHEN price_2d IS NOT NULL THEN 'price_2d ' ・ ・ ・ ELSE '' END AS colnm
お礼
上記の方法で無事に解決できました。 ありがとうございました。 先にNo.1さんが同じ回答をしていたため、 そちらの方をベストアンサーとさせていただきました。
- daifucream
- ベストアンサー率50% (1/2)
PostgreSQL 8.4からだとウィンドウ関数が使えます。 ウインドウ関数のROW_NUMBER()で並び替えた1番目(先頭)を取得すれば良いです。 上司がSQL文一つで出来ると言っているんだからPostgreSQL 8.4以上な気が しますが、8.4未満だったらごめんなさい。
お礼
ROW_NUMBER()は使ったことないかったです。 参考になりました。 ありがとうございました。
お礼
case文がありましたか! 無事解決しました。ありがとうございます。
補足
おそらく >その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。 という箇所を言っているのだと思いますが、 そこは対して問題ではないです。 問題は、一定の条件にて抽出した「カラム名」を取得しないといけないというところです。