簡體   English   中英

通過 SQL 查詢獲取百分比

[英]Get the percentage by SQL query

下面是我為從 SCCM 數據庫中獲取數據而創建的查詢。 我在獲取更多詳細信息時遇到了一些麻煩。

    select UI.ArticleID ,ui.DateLastModified, 
    SUM (CaSe WHEN (AAA.StateID = '2') Then 1 else 0
        END) As Install_Count,
    sum ( CASE 
          WHEN ((AAA.StateID = '2') and  ( OPSYS.Caption0 like 'Microsoft Windows%10%')) THEN  1 else 0
          END  ) As 'W10',
    sum ( CASE 
          WHEN  ((AAA.StateID = '2') and (OPSYS.Caption0 = 'Microsoft Windows 7 Enterprise' or OPSYS.Caption0 = 'Microsoft Windows 7 Entreprise')) THEN  1 else 0
          END  ) As 'W7',
sum ( CASE 
      WHEN  ((AAA.StateID != '2') and ((OPSYS.Caption0 not like 'Microsoft Windows%10%') and (OPSYS.Caption0 != 'Microsoft Windows 7 Enterprise') and (OPSYS.Caption0 != 'Microsoft Windows 7 Entreprise'))) THEN  1 else 0
      END  ) As 'Other',
        count(AAA.ResourceID) As 'Total Machines'
    FROM v_UpdateInfo UI 
            INNER JOIN v_CIAssignmentToCI CIA ON UI.CI_ID = CIA.CI_ID 
            INNER JOIN v_CIAssignment ON CIA.AssignmentID = v_CIAssignment.AssignmentID 
            Inner Join v_AssignmentStatePerTopic AAA on AAA.AssignmentID = CIA.AssignmentID
            inner join v_GS_OPERATING_SYSTEM  OPSYS  on OPSYS.ResourceID=AAA.ResourceID 
    where     CIA.AssignmentID = '1234567' and aaa.TopicType = '302'
    Group By ui.Title, UI.ArticleID ,ui.DateLastModified

上述查詢的 Output。

ArticleID   DateLastModified          Install_Count W10 W7  Other   Total Machines
4519998      2019-10-09 02:19:43.000    26          23  3    0         28
4520010      2019-10-09 02:18:04.000    26          23  3    0         28
4520004      2019-10-09 02:20:05.000    26          23  3    0         28

正如您在 output 中看到的那樣, Other顯示為 0。由於Total machines為 28,那么我預計Other部分有 2 台機器。 我稍后會調查它。

我想從Total Machines獲得Install_Count的百分比(十進制)。

試試下面的代碼片段:

 ((Install_Count * 100) /  Total Machines) AS Total_Percentage

代碼實現:

    select UI.ArticleID ,ui.DateLastModified, 
        SUM (CaSe WHEN (AAA.StateID = '2') Then 1 else 0
            END) As Install_Count,
        sum ( CASE 
              WHEN ((AAA.StateID = '2') and  ( OPSYS.Caption0 like 'Microsoft Windows%10%')) THEN  1 else 0
              END  ) As 'W10',
        sum ( CASE 
              WHEN  ((AAA.StateID = '2') and (OPSYS.Caption0 = 'Microsoft Windows 7 Enterprise' or OPSYS.Caption0 = 'Microsoft Windows 7 Entreprise')) THEN  1 else 0
              END  ) As 'W7',
    sum ( CASE 
          WHEN  ((AAA.StateID != '2') and ((OPSYS.Caption0 not like 'Microsoft Windows%10%') and (OPSYS.Caption0 != 'Microsoft Windows 7 Enterprise') and (OPSYS.Caption0 != 'Microsoft Windows 7 Entreprise'))) THEN  1 else 0
          END  ) As 'Other',
            count(AAA.ResourceID) As 'Total Machines',
((SUM (CaSe WHEN (AAA.StateID = '2') Then 1 else 0
            END) *100)/count(AAA.ResourceID)) AS Total_percentage
        FROM v_UpdateInfo UI 
                INNER JOIN v_CIAssignmentToCI CIA ON UI.CI_ID = CIA.CI_ID 
                INNER JOIN v_CIAssignment ON CIA.AssignmentID = v_CIAssignment.AssignmentID 
                Inner Join v_AssignmentStatePerTopic AAA on AAA.AssignmentID = CIA.AssignmentID
                inner join v_GS_OPERATING_SYSTEM  OPSYS  on OPSYS.ResourceID=AAA.ResourceID 
        where     CIA.AssignmentID = '1234567' and aaa.TopicType = '302'
        Group By ui.Title, UI.ArticleID ,ui.DateLastModified

編輯:

select UI.ArticleID ,ui.DateLastModified, 
        SUM (CaSe WHEN (AAA.StateID = '2') Then 1 else 0
            END) As Install_Count,
        sum ( CASE 
              WHEN ((AAA.StateID = '2') and  ( OPSYS.Caption0 like 'Microsoft Windows%10%')) THEN  1 else 0
              END  ) As 'W10',
        sum ( CASE 
              WHEN  ((AAA.StateID = '2') and (OPSYS.Caption0 = 'Microsoft Windows 7 Enterprise' or OPSYS.Caption0 = 'Microsoft Windows 7 Entreprise')) THEN  1 else 0
              END  ) As 'W7',
    sum ( CASE 
          WHEN  ((AAA.StateID != '2') and ((OPSYS.Caption0 not like 'Microsoft Windows%10%') and (OPSYS.Caption0 != 'Microsoft Windows 7 Enterprise') and (OPSYS.Caption0 != 'Microsoft Windows 7 Entreprise'))) THEN  1 else 0
          END  ) As 'Other',
            count(AAA.ResourceID) As 'Total Machines',
cast(((SUM (CaSe WHEN (AAA.StateID = '2') Then 1 else 0
            END) *100)/count(AAA.ResourceID))as decimal(10,2)) AS Total_percentage
        FROM v_UpdateInfo UI 
                INNER JOIN v_CIAssignmentToCI CIA ON UI.CI_ID = CIA.CI_ID 
                INNER JOIN v_CIAssignment ON CIA.AssignmentID = v_CIAssignment.AssignmentID 
                Inner Join v_AssignmentStatePerTopic AAA on AAA.AssignmentID = CIA.AssignmentID
                inner join v_GS_OPERATING_SYSTEM  OPSYS  on OPSYS.ResourceID=AAA.ResourceID 
        where     CIA.AssignmentID = '1234567' and aaa.TopicType = '302'
        Group By ui.Title, UI.ArticleID ,ui.DateLastModified

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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