簡體   English   中英

透視表中括號中的SQL Server 2005百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM