2013-03-20 1 views
-2

샘플 데이터 : 이것은 내 쿼리입니다SQL 서버 - 각각의 컬럼 데이터를 반복

LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS FAMILY CACHE_FAMILY Count 
23053B 00000 00000 00000 S   SUMMIT  WER   43 
23053B 00000 00000 00000 T   SUMMIT  WER   144 
23053B 00000 00000 00684 T   SUMMIT  WER   2 
23053B 00353 00418 00684 T   SUMMIT  WER   1 
23053B 00353 00418 00763 T   SUMMIT  WER   1 
23053B 00353 00418 01512 T   SUMMIT  WER   1 
23053B 00353 00418 06797 T   SUMMIT  WER   1 
23053B 00353 00418 30228 T   SUMMIT  WER   1 
23053B 00353 00418 31935 T   SUMMIT  WER   2 
23053B 05601 01402 00758 T   SUMMIT  WER   1 
23053B 05601 01402 09091 T   SUMMIT  WER   1 
23053B 05601 01402 65053 T   SUMMIT  WER   1 
------------------------------------------------------------------- 
23054B 00000 00000 00000 S     SUMMIT  WER   37 
23054B 00000 00000 00000 T     SUMMIT  WER   96  
23054B 00353 00418 00758 T     SUMMIT  WER   1  
23054B 00354 00414 01095 T     SUMMIT  WER   1  

는 : " SELECT LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, 가족, CACHE_FAMILY는 카운트 = ((총계 TX_HSA_SUMM에서 FR_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY, Count (LINE_NO)를 선택하십시오. 어디에서 MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND로 ('2013-03-08 10:20:00') GROUP BY LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY) 총 LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, 가족, CACHE_FAMILY, LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, 가족, CACHE_FAMILY BY 총 ORDER, BY 6,그룹은 "

이것은 실제로 내 샘플 데이터입니다. 벌써 계산 해. As 열 머리글을 볼 수 있습니다. 내 문제는 내가 백분율을 얻기 위해 필요한 각 행에 대한 개수와 개수를 합한 것입니다. 예를 들어, 위 레코드의 합계는 이므로 첫 번째 레코드 수는 이므로 계산은 43/199 * 100이어야합니다. 비율을 어떻게 볼 수 있습니까? The ?? 백분율을 얻으려는 열을 의미합니다. 제발 내가 급히 필요해 날 좀 도와 줘요. 그 특정 라인 전용 대시 후 새 라인을 그렇게 백분율을 계산할 때 그 특정 라인을 계산하고 백분율을 얻어야 계산 아니 그렇게해야합니다.

먼저 카운트를 얻는 방법을 보여줄 제안이 있습니까? 그 다음 합계에서부터 계산을하고 마지막으로. 백분율을 얻으려면 합계와 * 100으로 나누어야합니다. 다음 쿼리를 사용하여 감사

+1

당신이 할 수있는 우리에게 SQL 쿼리를 보여? 어떤 버전의 SQL Server를 사용하고 있습니까? – Arion

답변

0

봅니다 :

여기
select (Count/(select SUM(Count) from tablename))*100 from tablename; 

SUM() 열에있는 값의 합계를 찾는 데 사용됩니다.

link에서 언급했듯이 SUM은 숫자 열에 만 사용할 수 있습니다. Null 값은 무시됩니다.

+0

Im받는이 오류 msg 207, 수준 16, 상태 3, 줄 2 'Count'잘못된 열 이름입니다. 메시지, 수준 16, 상태 3, 줄 2 'Count'잘못된 열 이름입니다. –

+0

내 게시물에서 편집 된대로 @sentilkumar 업데이트 된 쿼리로 시도하십시오. –

+0

다시 메시지 409, 수준 16, 상태 2, 줄 1 합계 또는 평균 집계 작업은 인수로 varchar 데이터 형식을 사용할 수 없습니다. 메시지 403, 수준 16, 상태 1, 줄 1 데이터 형식에 대한 연산자가 잘못되었습니다. 연산자는 나누기, 같음 varchar를 입력합니다. –

0

쉬운 방법 : 이 (@temp 말) 임시 테이블을 만드는 것이로하여 위의 결과를 삽입하고 다음을 수행하십시오

Declare @temp table 
(
    LINE_NO varchar(20), 
    E_FIELD varchar(20), 
    F_FIELD varchar(20), 
    G_FIELD varchar(20), 
    HSA_STATUS varchar(20), 
    FAMILY varchar(20), 
    CACHE_FAMILY varchar(20), 
    CountValue int 
) 
Insert into @temp 
Your above result shown in your question 

Declare @CountSum int 
Set @CountSum=(Select Sum(CountValue) From @temp) 

Select t.*,Cast(Cast((t.CountValue*@CountSum) as Decimal(10,3))/100 as decimal(5,2)) Count_Percentage From @temp t 

그것을 줄 것이다 :

LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS FAMILY CACHE_FAMILY Count  Count_Percentage 
=============================================================================================== 
23053B 00000 00000 00000 S   SUMMIT WER    43  85.57 
23053B 00000 00000 00000 T   SUMMIT WER    144  286.56 
23053B 00000 00000 00684 T   SUMMIT WER    2   3.98 
23053B 00353 00418 00684 T   SUMMIT WER    1   1.99 
23053B 00353 00418 00763 T   SUMMIT WER    1   1.99 
23053B 00353 00418 01512 T   SUMMIT WER    1   1.99 
23053B 00353 00418 06797 T   SUMMIT WER    1   1.99 
23053B 00353 00418 30228 T   SUMMIT WER    1   1.99 
23053B 00353 00418 31935 T   SUMMIT WER    2   3.98 
23053B 05601 01402 00758 T   SUMMIT WER    1   1.99 
23053B 05601 01402 09091 T   SUMMIT WER    1   1.99 
23053B 05601 01402 65053 T   SUMMIT WER    1   1.99 
+0

43이 43/199 * 100의 계산 예제의 합계로 나누어 져야하므로 백분율 계산이 정확하지 않으므로 값이 21 %가됩니다. 이것이 실제로 어떻게 작동해야하는지 –

0
;WITH T AS 
(
    SELECT 43 AS [Count] 
    UNION ALL 
    SELECT 144 
    UNION ALL 
    SELECT 2 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 2 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
    UNION ALL 
    SELECT 1 
) 

SELECT 100.0 * T.[Count]/SUM(T.[Count]) OVER() 
FROM T