0

我正在尝试为查询提供一组颜色十六进制代码,并且我需要一个与每个结果对齐的值,如果颜色列表用完,最好使用循环。

我正在尝试使用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 中创建某种随机颜色生成器。

有没有一种简单的方法可以添加一列与所选数据一对一排列的硬编码数据?如果是这样,当到达终点时,是否有一个容易制作硬编码数据循环的方法?(如果没有,我可以将选择限制为最大的 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

来自穆的评论:

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 回答