2017-12-13 14 views
-1

各文字の横にある各文字の割合を表示するか、各文字ごとにその数を100で割り、各文字値の横に各小数点を表示する必要があります。SQL Server 2016新しい列の単一列数の割合

可能な場合は、以下のような割合が必要な場合は、文字の個別の値が得られるため、通常の集計や除算はできません。

は私のtable.name列が表示される場合:

NAME 
----- 
a 
b 
b 
c 
c 
c 
d 
d 
d 
d 
私は100の上に新しい列の各文字の割合を示すように使用するか、またはすることができますどのようなクエリ

合計は、それぞれの文字のためであり、例えば:

NAME  Percentage 
---------- -------------- 
a   100% 
b   50% 
b   50% 
c   33% 
c   33% 
c   33% 
d   25% 
d   25% 
d   25% 
d   25% 

これは「宿題」の問題ではありませんが、一般的ではないと思われるので、誰かがアプローチのアイデアを持っているかどうかを見たいと思っていました。

ありがとうございました。

+0

あなたはこれまでに何を試しましたか? SOは無料のコーディングサービスではありません。 – Eric

+0

その結果、100の結果を列の各文字の「COUNT」で割って欲しいですか?または、各行のデータは 'STRING_SPLIT'関数を必要とするスペースで構成されていますか?いずれにせよ、それは十分に単純だ。何が難しいですか? – ZLK

+0

@ZLKはい、それの隣の '100%'に対応する 'a'は1つだけですが、5 'e'は各 'e'の横に20%を持ち、各文字を100/、 可能なら。 私はまだそれを使用して遊んでいるが、私はおそらく適切な場所にCOUNT(名前)を使用していないだろう。 –

答えて

0
declare @a int,@b int,@st varchar(100),@result varchar(100),@current_char varchar(1) 

set @st='abbbccddddd' 
select @a=len(@st) 
set @result='' 
set @current_char=LEFT(@st,1) 

while @a>0 
BEGIN 
select @[email protected]+' '+left(@st,1)+' '+CAST(CAST(100.0/(LEN(@st) - LEN(REPLACE(@st,left(@st,1),''))) AS INT) AS VARCHAR(5))+'%' 
set @current_char=LEFT(@st,1) 
set @st=replace(@st,@current_char,'') 
set @a=len(@st) 
END 

print @result 
関連する問題