Sql-Server
返回值為 1 或 0 以及百分比
我需要一個 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<>在這裡擺弄