2017-12-13 3 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

그래서 열의 각 문자의 'COUNT'로 100을 나눈 결과를 원하십니까? 아니면 각 행의 데이터가'STRING_SPLIT' 함수가 필요한 공백 문자로 구성되어 있습니까? 어느 쪽이든, 충분히 간단 해 보입니다. 너는 어떤 어려움을 겪고 있는가? – ZLK

+0

@ZLK 예, 'a'하나만 옆에 '100 %'에 해당하지만 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