2015-04-08 395 views
0

SQL中是否有可能計算該用戶訂單總數(RequestedBy)中「StaffEntered」列的「是」值(計算列的情況)的百分比?我現在基本上是在使用Pivot表格的Excel中自己完成這個功能,但是認爲將它構建到查詢中可能更容易。下面是現有的樣本SQL代碼:SQL百分比計算

Select 
    Distinct 

    RequestedBy = HStaff.Name, 
    AccountID = isnull(pv.AccountID, ''), 
    StaffEntered = Case When DictionaryItem2.Name like '%PLB%' Then 'Yes' Else 'No' end 


FROM 
[dbo].[HOrd] HOrd WITH (NOLOCK) 
left outer join HStaff HStaff with (nolock) 
    on HOrd.Requestedby_oid = HStaff.ObjectID 
    and HStaff.Active = 1 
left outer join DictionaryItem DictionaryItem2 WITH (NOLOCK) 
    ON HSUser1.PreferenceGroup_oid = DictionaryItem2.ObjectID 
    AND DictionaryItem2.ItemType_oid = 98 

下面是我在做什麼在Excel中當前與查詢結果,我有一個數據透視表,我出除以「StaffEntered」場「是」值該特定「RequestedBy」用戶的總條目總數。基本上Excel是做彙總,然後我做一個簡單的除法計算來獲得百分比。

enter image description here

提前感謝!

回答

1

你沒有提供很多細節的方式,但我認爲這應該非常接近你正在尋找的東西。

select HStaff.Name as RequestedBy 
    , isnull(pv.AccountID, '') as AccountID 
    , Case When DictionaryItem2.Name like '%PLB%' Then 'Yes' Else 'No' end as StaffEntered 
    , sum(Case When DictionaryItem2.Name like '%PLB%' Then 1 Else 0 end)/GrandTotal 
From SomeTable 
group by HStaff.Name 
    , isnull(pv.AccountID, '') 
    , GrandTotal 
+0

GrandTotal是不是在我的查詢中的列,它是一個Excel數據透視表中的字段。我需要爲每個用戶(工作人員姓名)逐行添加總數。 – Nick

+0

我不知道你是什麼意思。它是每個用戶的行數嗎?一些其他列的總和。無論如何,這很可能只是某種形式的聚合。它看起來也許只是數(*),但我不能說清楚。 –

0

給出您的SQL語句的FROM部分將允許我們創建一個更正確的答案。該聲明將得到的是/否每HStaff名的總和,它在你的SQL語句添加到每個細節記錄:

WITH cte 
      AS (SELECT HStaff.Name , 
         SUM(CASE WHEN dictionaryItem2.Name LIKE '%PLB%' THEN 1 
           ELSE 0 
          END) AS YesCount , 
         SUM(CASE WHEN dictionaryItem2.Name NOT LIKE '%PLB%' 
           THEN 1 
           ELSE 0 
          END) AS NotCount 
       FROM  YourTable 
       GROUP BY HStaff.Name 
      ) 
    SELECT HStaff.Name AS requestedBy , 
      ISNULL(pv.AccountID, '') AS AccountID , 
      CASE WHEN DictionaryItem2.Name LIKE '%PLB%' THEN 'Yes' 
       ELSE 'No' 
      END AS StaffEntered , 
      cte.YesCount/(cte.YesCount + cte.NotCount) AS PLB_Percentage 
    FROM yourtable 
      INNER JOIN cte ON yourtable.Hstaff.Name = cte.NAME 
+0

感謝您的反饋。我已經添加了上面的FROM子句,不知道這將如何改變你的建議答案..? – Nick