我正在尝试为查询提供一组颜色十六进制代码,我需要一个与每个结果对齐的值,如果它用完了,最好使用颜色列表循环。
我正在尝试将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"
答案 0 :(得分: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