0

色の 16 進コードの配列をクエリに提供しようとしていますが、各結果に 1 つの値を並べる必要があります。

unnest(ARRAY[])約15〜20個の文字列としてハードコードされた色で使用しようとしています。

UNNEST(ARRAY['9A2849', '0F910F', 'A3915D', 'D49D2F', 'E87B00',
    '09A6B3', '007DC3', '969696', '005788', '086908', '706545', 
    '996600', '801131', '606060', 'BA5004', '008596']) AS color

JOINが必要なので、私は仕事をすることができません。ON

具体的には、カラー テーブルを追加したり、SQL で何らかのランダム カラー ジェネレーターを作成したりすることなく、円グラフに適切な色を提供しようとしています。

選択したデータと 1 対 1 で並べるハードコードされたデータの列を追加する簡単な方法はありますか? もしそうなら、ハードコーディングされたデータが最後に達したときに簡単にループさせることはできますか? (そうでない場合は、選択を最大の 25 の結果に制限できます。それ以上の結果はいずれにせよ、円グラフのスライバーになるためです。)

結果は次のようになります。

value | label                 | color
-----------------------------------------
2     | "A test for cloning"  | "9A2849"
6     | "Automobile Bays"     | "0F910F"
2     | "Break Rooms"         | "A3915D"
3     | "Common Areas"        | "D49D2F"
4

1 に答える 1

3

あなたが持っている色の数%を使用してそれに参加するのはどうですか:

SELECT *
FROM (SELECT *, row_number() OVER(ORDER BY numb DESC) AS POSITION FROM tab) t
JOIN (SELECT UNNEST( ARRAY['9A2849', '0F910F', 'A3915D', 'D49D2F', 'E87B00','09A6B3', '007DC3', '969696', '005788', '086908', '706545',
    '996600', '801131', '606060', 'BA5004', '008596']) AS color,  UNNEST( ARRAY[1, 2, 3, 4, 5,  6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]) AS numb
   ) x 
ON t.POSITION % 16 + 1 = x.numb;

http://www.sqlfiddle.com/#!1/00823/3

Mu さんのコメントから:

SELECT (ARRAY['9A2849', '0F910F', 'A3915D', 'D49D2F', 'E87B00','09A6B3', '007DC3', '969696', '005788', '086908', '706545',
    '996600', '801131', '606060', 'BA5004', '008596'])[t.position% 16 + 1] AS color, *
FROM (SELECT *, row_number() OVER(ORDER BY numb DESC) AS POSITION FROM tab) t

http://www.sqlfiddle.com/#!1/00823/10

于 2013-09-24T23:23:52.217 に答える