![](/img/trans.png)
[英]How to combine these two queries into one? (multiple joins against the same table)
[英]Combine multiple queries against one table into multiple fields of one result set
答案 :這是根據@Michael的答案構建的最終查詢:
SELECT
Emp_ID,
MAX(CASE WHEN Skill_ID = 'WLN' THEN (Rating > 0) END) AS `WLN`,
MAX(CASE WHEN Skill_ID = 'LOC' THEN (Rating > 0) END) AS `LOC`,
MAX(CASE WHEN Skill_ID = 'BRV' THEN (Rating > 0) END) AS `BRV`,
AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN (Rating) END) > 0 AS `KSD`
FROM Emp_Skill
WHERE Emp_ID IN (120,348,361,370)
GROUP BY Emp_ID
問題 :
我有以下Emp_Skill
表:
Skill_ID* Emp_ID* Rating
--------------------------
WLN 120 6
WLN 348 5
WLN 361 7
WLN 370 8
LOC 120 7
LOC 370 7
LOC 348 7
BRV 120 3
LOC 361 6
BRV 348 1
KWH 348 5
KWH 120 5
KWH 361 5
KWH 370 5
SIC 361 8
SIC 348 4
SIC 120 2
DOL 348 5
DOL 361 8
而且我需要知道是否有任意數量的員工對每個技能都有正面的技能評分 。
所以我們可以說我想看看這個信息對員工120,348,361和370。
技能WLN
查詢1為:
SELECT `Emp_ID`, `Rating` > 0 AS `WLN` FROM `Emp_Skill` WHERE `Skill_ID` = 'WLN' AND `Emp_ID` IN (120,348,361,370)
返回:
Emp_ID WLN
------------
120 1
348 1
361 1
370 1
技能LOC
查詢2為:
SELECT `Emp_ID`, `Rating` > 0 AS `LOC` FROM `Emp_Skill` WHERE `Skill_ID` = 'LOC' AND `Emp_ID` IN (120,348,361,370)
返回:
Emp_ID LOC
------------
120 1
348 1
361 1
370 1
技能BRV
查詢3為:
SELECT `Emp_ID`, `Rating` > 0 AS `BRV` FROM `Emp_Skill` WHERE `Skill_ID` = 'BRV' AND `Emp_ID` IN (120,348,361,370)
返回:
Emp_ID BRV
------------
120 1
348 1
技能KSD
查詢4為:
SELECT `Emp_ID`, AVG(`Rating`) > 0 AS `KSD` FROM `Emp_Skill` WHERE `Skill_ID` IN ('KWH','SIC','DOL') AND `Emp_ID` IN (120,348,361,370) GROUP BY `Emp_ID`
返回:
Emp_ID KSD
------------
120 1
348 1
361 1
370 1
問題是: 如何有效地將這些查詢組合到一個結果表中,並將它們全部合並在一起 ,即:
Emp_ID WLN LOC BRV KSD
------------------------------
120 1 1 1 1
348 1 1 1 1
361 1 1 NULL? 1
370 1 1 NULL? 1
可能來自組合的SELECT
語句? ( NULL
值可以是返回結果集中評估為FALSE
任何值)
或者 :從性能角度來看,如果我一個接一個地查詢每個技能等級(使用上面的四個查詢)會更好嗎?
抱歉,如果這對於那里的一些偷窺而言是基本的,但是我已經拉了很多頭發,但我仍然沒有殺死它。 大聲笑。 提前致謝。
這是通過數據透視查詢完成的,該查詢相當於一堆CASE
語句。 我認為這應該使您接近所需的內容:
SELECT
Emp_ID,
MAX(CASE WHEN Skill_ID = 'WLN' THEN (Rating > 0) END) AS `WLN`,
MAX(CASE WHEN Skill_ID = 'LOC' THEN (Rating > 0) END) AS `LOC`,
MAX(CASE WHEN Skill_ID = 'BRV' THEN (Rating > 0) END) AS `BRV`,
AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN (Rating > 0) END) AS `KSD`
FROM Emp_Skill
GROUP BY Emp_ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.