Sql-Server

返回值為 1 或 0 以及百分比

  • October 30, 2018

我需要一個 SELECT,它會產生一個百分比和 1 和 0 的列,表示存在或不存在。

目標是為使用計量器生成數據(百分比 0.0-1.0)和每個可測量值作為 1 或 0。它還必須為使用者表中的每個使用者顯示一行,即使該使用者根本沒有項目。

設想:

  • 在一個表中,一個使用者可以有許多項目,它們都有一個特定的 ItemType。

像 A、B、C、D 或 E 型

  • 如果使用者擁有所有類型的項目,則結果應為 (5/5 100%):

百分比 ABCDE

1.0, 1, 1, 1, 1, 1

  • 如果使用者沒有任何類型 (0/5 0%):

百分比 ABCDE

0.0, 0, 0, 0, 0, 0

  • 如果使用者有一些類型 (3/5 60%):

百分比 ABCDE

0.6, 1, 1, 1, 0, 0

SAMPLE:

樣本數據和想要的結果

使用 CTE 使用 CASE 或 IIF 計算 A、B、C、D 和 E,然後計算最終百分比。

;WITH tbl AS
(
SELECT 
    u.id,
    u.name,
    CASE WHEN EXISTS(SELECT 1 FROM items WHERE user_id = u.id AND itemtype = 'A') 
         THEN 1 ELSE 0 END AS [A],
    CASE WHEN EXISTS(SELECT 1 FROM items WHERE user_id = u.id AND itemtype = 'B') 
         THEN 1 ELSE 0 END AS [B],
    CASE WHEN EXISTS(SELECT 1 FROM items WHERE user_id = u.id AND itemtype = 'C') 
         THEN 1 ELSE 0 END AS [C], 
    CASE WHEN EXISTS(SELECT 1 FROM items WHERE user_id = u.id AND itemtype = 'D') 
         THEN 1 ELSE 0 END AS [D],
    CASE WHEN EXISTS(SELECT 1 FROM items WHERE user_id = u.id AND itemtype = 'E') 
         THEN 1 ELSE 0 END AS [E]
FROM
    users u
)
SELECT
    id,
    name,
    CAST((A+B+C+D+E) / 5.0 as decimal(10,1)) AS Percentatge,
    A,
    B,
    C,
    D,
    E
FROM
    tbl;
GO
編號 | 姓名 | 百分比 | 一個 | 乙| C | D | 乙
-: | :---- | :---------- | -: | -: | -: | -: | -:
 1 | 使用者1 | 1.0 | 1 | 1 | 1 | 1 | 1
 2 | 使用者2 | 0.4 | 1 | 1 | 0 | 0 | 0
 3 | 使用者3 | 0.2 | 0 | 1 | 0 | 0 | 0
 4 | 使用者4 | 0.0 | 0 | 0 | 0 | 0 | 0
 5 | 使用者5 | 0.0 | 0 | 0 | 0 | 0 | 0

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/221351