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

これを行う1つの方法は、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バイトの値を生成します。は、同じtable_name(このmax() over (partition . . .) 場合)を持つすべてに同じ値を割り当てます。次の式を使用します。

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

私が提案するのは、

テーブルから一時テーブルに個別の値を取得します。

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 に答える