Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将硬编码数组与结果1:1联接_Sql_Postgresql_Colors - Fatal编程技术网

SQL将硬编码数组与结果1:1联接

SQL将硬编码数组与结果1:1联接,sql,postgresql,colors,Sql,Postgresql,Colors,我试图为一个查询提供一个颜色十六进制代码数组,并且我需要一个与每个结果对齐的值,如果颜色列表用完,最好使用循环颜色列表 我试图使用unnestARRAY[]将颜色硬编码为大约15-20个字符串 UNNEST(ARRAY['9A2849', '0F910F', 'A3915D', 'D49D2F', 'E87B00', '09A6B3', '007DC3', '969696', '005788', '086908', '706545', '996600', '801131', '

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

我试图使用unnestARRAY[]将颜色硬编码为大约15-20个字符串

UNNEST(ARRAY['9A2849', '0F910F', 'A3915D', 'D49D2F', 'E87B00',
    '09A6B3', '007DC3', '969696', '005788', '086908', '706545', 
    '996600', '801131', '606060', 'BA5004', '008596']) AS color
我无法加入工作,因为他们需要ON子句

具体来说,我试图为饼图提供一些合理的颜色,而不必添加颜色表或在SQL中创建某种随机颜色生成器

有没有一种简单的方法可以添加一列硬编码数据,这些数据与所选数据一一对应?如果是这样的话,在到达硬编码数据循环的末端时,是否有一个容易实现的方法?如果没有,我可以将select限制为最大的25个结果,因为在饼图上还有更多的结果

结果应该是:

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

使用一个占你拥有的颜色数%的行号,并在上面连接,怎么样

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;
穆的评论是:

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

使用一个占你拥有的颜色数%的行号,并在上面连接,怎么样

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;
穆的评论是:

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

听起来你想要左、右或全联接,而不是内部联接。我刚刚尝试了交叉联接,它只为我的结果的每一行提供了数组中的第一个值。据我所知,所有其他连接都需要一个ON条件,我可以使用什么条件?你从什么数据开始?@muistooshort-我上面提供的示例结果是相同的,只是没有颜色列。但是你怎么知道value=2得到color=9A2849?是否有一些列用于排序,而您只想按顺序匹配?听起来您想要的是左、右或完全联接,而不是内部联接。我刚刚尝试了交叉联接,它只为我的结果的每一行提供了数组中的第一个值。据我所知,所有其他连接都需要一个ON条件,我可以使用什么条件?你从什么数据开始?@muistooshort-我上面提供的示例结果是相同的,只是没有颜色列。但是你怎么知道value=2得到color=9A2849?是否有一些列是你用来排序的,而你只是想按顺序排列?你甚至不需要连接/取消请求,你可以说选择。。。选择*中的数组[…][n%16+1],行数超过。。。并将数组的争用右移到外部的SELECT中。@muistooshort这样会更好,但我不能这样做。确切的语法是什么?类似这样的:从select value、label、ARRAY[…][n%16+1],从select value、label、row_number over as n from T as dt。只需填写顺序条件和数组内容,棘手的部分是将数组文字用括号括起来。这就是我缺少的,没有括号。很酷,不知道你能做到。你甚至不需要加入/取消这个,你可以说选择之类的话。。。选择*中的数组[…][n%16+1],行数超过。。。并将数组的争用右移到外部的SELECT中。@muistooshort这样会更好,但我不能这样做。确切的语法是什么?类似这样的:从select value、label、ARRAY[…][n%16+1],从select value、label、row_number over as n from T as dt。只需填写顺序条件和数组内容,棘手的部分是将数组文字用括号括起来。这就是我缺少的,没有括号。很酷,我不知道你能做到。