• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:■一番最初に値が入っている(Nullでない)カラム名を取得するには?)

最初に値が入っているカラム名を取得する方法

このQ&Aのポイント
  • SQLを使用して、テーブル内の最初に値が入っているカラム名を取得する方法について説明します。
  • 指定されたテーブルには、price_1dからprice_31dまでのカラムがあります。
  • 最初に値が入っているカラム名を特定するために、NULLチェックおよび日付チェックを行う必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

PostgreSQLのCASE文を調べると良いです。

yuji_mekaru
質問者

お礼

case文がありましたか! 無事解決しました。ありがとうございます。

yuji_mekaru
質問者

補足

おそらく >その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。 という箇所を言っているのだと思いますが、 そこは対して問題ではないです。 問題は、一定の条件にて抽出した「カラム名」を取得しないといけないというところです。

その他の回答 (3)

  • yamada59
  • ベストアンサー率74% (29/39)
回答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 テーブル;

yuji_mekaru
質問者

お礼

case文で無事に出来ました。 ありがとうございました。 先にNo.1さんが同じ回答をしていたため、 そちらの方をベストアンサーとさせていただきました。

回答No.3

最初に値が入っているカラム名を返すだけであれば 以下のようにしてできると思います。 CASE WHEN price_1d IS NOT NULL THEN 'price_1d ' WHEN price_2d IS NOT NULL THEN 'price_2d ' ・ ・ ・ ELSE '' END AS colnm

yuji_mekaru
質問者

お礼

上記の方法で無事に解決できました。 ありがとうございました。 先にNo.1さんが同じ回答をしていたため、 そちらの方をベストアンサーとさせていただきました。

回答No.2

PostgreSQL 8.4からだとウィンドウ関数が使えます。 ウインドウ関数のROW_NUMBER()で並び替えた1番目(先頭)を取得すれば良いです。 上司がSQL文一つで出来ると言っているんだからPostgreSQL 8.4以上な気が しますが、8.4未満だったらごめんなさい。

yuji_mekaru
質問者

お礼

ROW_NUMBER()は使ったことないかったです。 参考になりました。 ありがとうございました。

関連するQ&A