2012-07-13 4 views
2

이것은 here의 후속 질문입니다. 좀 출력을 가지고 있으며 총 열을 추가 할 수 있었지만 지금은이 같은 비율을 추가하기 위해 열을 사용할 필요가 : 여기 도움이 발견피벗 테이블의 괄호 안의 SQL Server 2005 백분율

| LESSONID  RESPONSE COUNT-> | 0  | 1  | 2  | 3  | 4  | N | 
---------------------------------------------------------------------------------------       
|lesson1      | 1 (20%) | 1 (20%) | 1 (20%) | 1 (20%) | 1 (20%) | 5 | 
|lesson2      | 1 (20%) | 1 (20%) | 1 (20%) | 2 (40%) | 0  | 5 | 
|lesson3      | 1 (20%) | 1 (20%) | 0  | 3 (60%) | 0  | 5 | 
|lesson4      | 0  | 1 (20%) | 4 (80%) | 0  | 0  | 5 | 
|lesson5      | 0  | 5 (100%)| 0  | 0  | 0  | 5 | 

하지만 모두가 함께 모여 얻을 수 없습니다 .

Here is what I have so far

* 또한 당신이 다른와 함께 할 것처럼 당신은 당신의 피벗 쿼리의 결과를 포맷 할 수 있습니다 SQLFiddle

+1

질문 할 때 태그 목록에 'SQL'을 추가 할 수 있습니다. 나는 이것이보기 카운트를 두 배로하여 괜찮은 대답을 얻을 기회를 증가시킬 것이라고 믿습니다. –

답변

2

으로 표현되지 않는 SQL 서버 2005입니다. 따라서 각 소스에 대한 백분율을 연결할 수 있습니다. Here is a SQL FIDDLE.

SELECT RC.lessonid AS 'lessonid  response count->' 
    , convert (varchar(20), isnull([0], 0)) 
    + isnull (' (' 
-- As both numbers are integers don't forget to cast one of them into double 
-- If you dislike * 100 format or want more precise result. 
    + convert (varchar(20), [0] * 100/RCN.N) 
    + '%)', '') as [0] 
    , convert (varchar(20), isnull([1], 0)) 
    + isnull (' (' 
    + convert (varchar(20), [1] * 100/RCN.N) 
    + '%)', '') as [1] 
    , convert (varchar(20), isnull([2], 0)) 
    + isnull (' (' 
    + convert (varchar(20), [2] * 100/RCN.N) 
    + '%)', '') as [2] 
    , convert (varchar(20), isnull([3], 0)) 
    + isnull (' (' 
    + convert (varchar(20), [3] * 100/RCN.N) 
    + '%)', '') as [3] 
    , convert (varchar(20), isnull([4], 0)) 
    + isnull (' (' 
    + convert (varchar(20), [4] * 100/RCN.N) 
    + '%)', '') as [4] 
    ,RCN.N 
FROM (
    SELECT lessonid 
     ,response 
     ,count(response) AS respcnt 
    FROM tblRChoices 
    GROUP BY lessonid 
     ,response 
    ) TableResponseCount 
PIVOT(SUM(respcnt) FOR response IN (
      [0] 
      ,[1] 
      ,[2] 
      ,[3] 
      ,[4] 
      )) RC 
JOIN (SELECT lessonid, count(lessonid) as N FROM tblRChoices GROUP BY lessonid) RCN 
ON RC.lessonid = RCN.lessonid 
2

당신은 문자열로 값을 캐스팅 한 후 하나 개의 문자열 (SQL Fiddle with Demo of it in one field)로 연결하여이 작업을 수행 할 수 있습니다. 비슷한 :

SELECT RC.lessonid AS 'lessonid  response count->' 
, cast(isnull([0], 0) as varchar(10)) 
    + isnull(' (' + cast([0]*100/RCN.N as varchar(10)) + '%)', '') as [0] 

그러나 내 질문은 문자열과 같은 열에 표시해야 할 것입니다. 프론트 엔드 애플리케이션에서 이것을 사용하려고합니까? 그렇다면 백분율을 별도의 열에 배치하여 초기 값을 int로 유지하는 것이 좋습니다. (SQL Fiddle with Demo 참조)이 방법을 사용하면이 데이터를 사용하는 방법에 따라 유연성을 얻을 수 있으므로 초기 값을 얻기 위해 백분율을 제거 할 필요가 없기 때문에이 데이터를 사용하게됩니다.

SELECT RC.lessonid AS 'lessonid  response count->' 
    , cast(isnull([0], 0) as varchar(10)) as [0] 
    , isnull(' (' + cast([0]*100/RCN.N as varchar(10)) + '%)', '') as [%_0] 
+0

당신은 완전히 맞습니다. 고객이 원한다고 생각합니다. 나는 그저 카운트, 백분율, 카운트 + 백분율 그리고 다음 칼럼의 퍼센트로 카운트를 제공 할 것입니다. 결정하게하십시오. – gooddadmike

+0

솔직히 정답을 보상하는 법을 모르겠습니다. 지난번에 나를 도왔다. 두 답이 모두 정확합니다. 니콜라가 먼저 대답했다. – gooddadmike

+1

그들은 먼저 대답했다, 나는 단지 대안에 대한 제안과 그 문제에 대한 관점을 제시했다. – Taryn