sql >> データベース >  >> RDS >> Oracle

都市の列ごとに従業員の名前を配置する必要があります

    残念ながら、少なくとも「ストレート」SQLでは、実行しようとしていることは不可能です。動的SQL、または2ステップのプロセス(新しいSQLステートメントである文字列を生成する最初のステップ)が必要になります。複雑です。

    問題は、都市名の固定リストを(文字列リテラルとして)含めていないことです。取得したものに基づいて列を作成しようとしています(従業員から都市を選択します)。したがって、列の数と列の名前は、Oracleエンジンがテーブルからデータを読み取るまでわかりませんが、エンジンが起動する前に、すべての列が何であるかをすでに知っている必要があります。矛盾。

    これが可能であれば、ほぼ確実に必要になることにも注意してください(個別を選択) 従業員からの都市)。

    追加:OPはコメントでフォローアップの質問をします(以下を参照)。

    理想的な配置は、都市を独自の小さなテーブルに配置し、従業員テーブルの「都市」に外部キー制約を設定して、「都市」を管理できるようにすることです。 1人のHR担当者がニューヨークに入り、別の人がニューヨーク市に入り、3人目が同じ都市のNYCに入ることを望まないでしょう。いずれにせよ、最初に、ピボット句の演算子INに続くサブクエリを、都市の文字列リテラルのコンマ区切りリストに置き換えて、コードを試してください。... IN('DFW'、'CH'、 'NY')。このリストにそれらを配置する順序は、出力の列の順序になることに注意してください。他に問題があるかどうかを確認するためにクエリ全体をチェックしませんでした。これを試して、何が起こるかをお知らせください。

    頑張ってください!



    1. 世界をカバーする六角形のグリッドの座標を持つテーブル

    2. OracleのSQLServerAPPLYに相当するものは何ですか?

    3. Androidsqlitedb.queryはCursorIndexOutOfBoundsExceptionにつながります

    4. PARSENAME()を使用して、SQLServerのオブジェクト名の一部を返します