我有一个返回许多字符串值的查询。我需要为每个唯一值指定一种颜色,但我无法知道将有多少唯一值或以什么顺序。以下是查询返回的内容:
| 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值并在开头附加'#'来实现这一点,但颜色变化非常小 - 大多数只是相同颜色的不同色调。有没有人有更好的想法?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
一种方法是使用NEWID()。下面是一个将随机4字节值分配给information_schema.columns中的表的示例:
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))
答案 3 :(得分:0)
SET [Color] = '#' + CONVERT(VARCHAR(max), CRYPT_GEN_RANDOM(3), 2)