[英]SQL Server 2005 percentage in parenthesis in pivot table
這是從這里開始的后續問題。 我有一些輸出,能夠添加總計列,但是現在我需要使用該列來添加百分比,如下所示:
| 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
您可以像設置其他查詢一樣設置數據透視查詢的結果格式。 因此,您可以將百分比連接到其各自的來源。 這是一個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
您可以通過將值轉換為字符串,然后將其串聯為一個字符串來完成此操作( SQL Fiddle在一個字段中帶有Demo )。 與此類似:
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]
但是,我的問題是您是否需要將此顯示在與字符串相同的列中。 您打算在前端應用程序中使用它嗎? 如果是這樣,那么您可能要考慮將百分比放在單獨的列中,這樣您仍將具有一個作為整數的初始值。 (請參見帶有演示的SQL Fiddle。 )按照您將如何使用此數據的方式執行此操作,將為您提供更大的靈活性,因為這樣您就不必去除百分比即可獲得初始值。
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.