2

これはhereからのフォローアップの質問です。いくつかの出力があり、合計列を追加できましたが、列を使用してパーセンテージを次のように追加する必要があります。

| 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 |

ここでいくつかのヘルプを見つけましたが、すべてをまとめることはできません。

これが私がこれまでに持っているものです

*また、SQLFiddle に表示されていない SQL Server 2005 を使用しています

4

2 に答える 2

2

これを行うには、値を文字列にキャストし、それを 1 つの文字列に連結します ( 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]
于 2012-07-13T11:36:42.783 に答える
2

他のクエリと同様に、ピボット クエリの結果をフォーマットできます。そのため、パーセンテージをそれぞれのソースに連結できます。ここに 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
于 2012-07-13T10:02:42.140 に答える