質問

私の関係がとても

のような言ってみましょう

画像の説明が入力されています

ランクで並べ替えたいのですが、A'SとBは最初です。だから私の関係は

のように見えるでしょう

画像の説明が入力されています

最初に私は2つの関係を持っていましたが、2つの関係を順番に注文してから、2つの関係を統合しましたが、彼らはまったく魅力的になったばかりです。私はケースを使ってみましたが、それがどのように機能するのかわかりません。整数の文字を混在させることについてのエラーが発生し続けました。

編集:上記の最初の関係が、やや複雑なビューの後に終わるものであることを言及するのを忘れました。たとえば、2つのビューを作成しました。これはAとBクラスしか持ち、その後ランクでそれを注文しました。 2番目のCクラスを見て、ランクでそれを注文しました。それから私はそれらを団結させました、しかし彼らはただ混合されます。

役に立ちましたか?

解決

CASEでは、行を2つのグループに分割するためだけに、クラス 'a'または 'b'を持つものが最初のグループ(ORDER BY)と2番目のすべてのグループに配置されます(1):

ORDER BY 
    CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
    rank ;
.

他のヒント

私はそれを行う方法の一例を与えるつもりです。

CTESとWITH

href="http://www.postgresql.org/docs/9.4/static/queries-with.html" rel="nofollow"> ctes あなたを許可する一時的な単一クエリテーブルのような構造を形成するには、1回のクエリでCTEをもう1つ依存することができるため、クエリの半手続き型を作るための便利でわかりやすい方法を提供します。

あなたの場合は、

を試してみてください
WITH AB_results AS(
  SELECT class, rank, 1 AS hidden_rank
  FROM my_relation
  WHERE class IN ('A','B')
),
Non_AB_results AS(
  SELECT class, rank, 2 AS hidden_rank
  FROM my_relation
  WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;
.

ここで2,3分でSQLFIDDLEをまとめようとしています。 :p

編集:私は小さなエラーをしました。私たちが話すときに例でそれを掃除しようとしています。

編集2:エラーが修正されました。残念ながら、SQLFIDDLEは今やほんの少しのトラブルを持っていますが、 ここ いくつかのテストのためのSQLFIDDLEへのリンク。

私が最も優れた可能な方法でこれを解決しなかったかもしれないに注意してくださいが、それはあなたの問題を解決するべきです。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top