0

我有一个返回多个字符串值的查询。我需要为每个唯一值分配一种颜色,但我无法知道会有多少个唯一值或以什么顺序。以下是查询目前返回的内容:

   |    ID    |    Value    |   Colour   | 
         1         XF452          ?
         2         ALL1F5         ?
         3         NULL           ?
         1         XF452
         2         BD4F
         3         NULL
         1         XF452
         2         XF452
         3         XF452

我想为每个不同的值分配一种颜色,以便它最终看起来像这样:

   |    ID    |    Value    |   Colour   | 
         1         XF452        #880010
         2         ALL1F5       #FF0000
         3         NULL         #8C8C8C
         1         XF452        #880010
         2         BD4F         #002871
         3         NULL         #8C8C8C
         1         XF452        #880010
         2         XF452        #880010
         3         XF452        #880010

我已经通过获取 Value 列的 unicode 值并在开头附加一个“#”来实现这一点,但颜色变化非常小——主要是相同颜色的不同深浅。有没有人有更好的想法?

4

4 回答 4

1

您可以使用子查询来获取每个值并使用以下方法为其分配颜色(使用您选择的任何方法):

SELECT value, getMyColour() AS colour FROM table GROUP BY value;

然后,您可以将此子查询加入原始表以获取值:

SELECT table.id, table.value, subq.colour 
FROM table, 
    (SELECT value, getMyColour() AS colour FROM table GROUP BY value) subq
WHERE table.value = subq.value
于 2012-09-01T08:44:33.987 回答
0

我的建议是,

从您的表中获取不同的值到临时表中。

create table #temp(value varchar(10),color_code varchar(100))

insert into #temp
select distinct value,getcolor from yourtable

现在你只需要像这样加入表格

update u SET Color=t.color_code from yourtable u join #temp t
on u.value=t.value
于 2012-09-01T08:49:57.863 回答
0

一种方法是使用 NEWID()。下面是一个为 information_schema.columns 中的表分配随机 4 字节值的示例:

select max(cast(NEWID() as BINARY(4))) over (partition by table_name), table_name
from INFORMATION_SCHEMA.COLUMNS

cast(NEWID() as BINARY(4))表达式生成一个随机的 4 字节值。将max() over (partition . . .) 相同的值分配给具有相同 table_name 的所有内容(在这种情况下)。您将使用以下表达式:

select max(cast(NEWID() as BINARY(4))) over (partition by value)

顺便说一句,如果您想要渐变颜色而不是随机颜色,我会考虑类似:

select cast((dense_rank(value) over (partition by value))/(select count(distinct value)*1.0 from table)*power(2.0, 32) as binary(4))
于 2012-09-01T16:21:01.700 回答
0
SET [Color] =  '#' +  CONVERT(VARCHAR(max), CRYPT_GEN_RANDOM(3), 2)
于 2015-02-13T10:07:44.877 回答